There were runners at first and second with two outs in the 11th when Soto's double off Tony Sipp dropped in front of the wall in right field to put Chicago up 5-3. Soto entered the game in the eighth inning for an injured Jose Abreu.
Adam LaRoche followed with an RBI single to push the lead to 6-3.
Josh Fields (2-1) walked two in 1 1/3 innings for the loss. He was replaced by Sipp after a one-out walk in the 11th inning.
The game lasted more than 4 hours, a day after the White Sox were forced to play a doubleheader against the Orioles caused by the rioting in Baltimore last month on what would have been a day off.
White Sox rookie starter Carlos Rodon allowed eight hits and three runs -- one earned -- in a season-high 6 1/3 innings.
Fellow rookie Lance McCullers yielded five hits and two runs -- one earned -- with a season-high seven strikeouts in 4 1/3 innings for the Astros in his third major league start.
Jose Altuve singled before a double by Tucker to start the sixth inning. Carter hit a sacrifice fly that sent Altuve racing home to tie it at 2. Tucker advanced to third on an error by Melky Cabrera on the play.
The Astros took the lead when Luis Valbuena reached and Tucker scored on an error by Abreu. Abreu made a diving stop to grab the ground ball, but his throw to first was high and Rodon couldn't make the play.
McCullers was replaced by Joe Thatcher after consecutive walks loaded the bases with one out in the fifth inning.
The Astros tied it at 1-1 on an RBI single by Carter.
Alexei Ramirez doubled with two outs in the third before Conor Gillaspie struck out. But the ball rolled away from catcher Hank Conger and toward the backstop. Conger then hit Gillaspie on the back on an error on the throw to first to leave him safe at first and allow Ramirez to score and make it 1-0.
White Sox: Abreu was replaced at first base in the eighth inning with irritation in his right index finger. ... OF Avisail Garcia missed his fifth straight game after leaving Monday's game with inflammation in his right knee. He did some running on Friday before the game and manager Robin Ventura thought he looked good.
"It was very encouraging watching him run around ... looks like it would be (Saturday) to have him start again," Ventura said.
Astros: Houston starter Scott Feldman was placed on the 15-day disabled list after arthroscopic surgery on his right knee on Friday. He is expected to be out about six weeks. Left-hander Brett Oberholtzer, on the disabled list with a blister on his left index finger, is scheduled to be activated and take Feldman's spot in the rotation on Monday.
NICE CATCH, SKIP
Flowers flipped over the railing into the camera bay adjacent to the White Sox dugout chasing a foul ball in the fourth inning. But he was saved from a hard fall when Ventura leaned over, grabbed him and held him over his shoulder until others came to help him to his feet.
That was the second mishap with a foul ball in the game for Flowers, who got a cut on the bridge of his nose when a foul ball bounced off his mask in the first inning.
Evan Gattis was the batter on both plays.
Houston left-hander Dallas Keuchel looks to get back on track after his career-best, eight-game winning streak dating to last season was snapped in his last start. He opposes Jose Quintana on Saturday. Keuchel threw his first complete game of the season, but the Astros fell 4-3 to Baltimore.
Keuchel leads the American League by holding batters to a .190 average and is tied for second in wins with six.