Aaron Crow gave up a leadoff single to Dayan Viciedo and walked Jeff Keppinger in the ninth. With two runners on and no outs, the Royals turned to their closer, Greg Holland, in a tie game. Pinch-hitter Gordon Beckham flied out, which advanced Jordan Danks, who was pinch-running for Viciedo, to third, and Alejandro De Aza was able to drive in Danks with a sac fly.
"You can't give free passes in a tight game in the ninth inning, so that's what really beat us," said Crow, who dropped to 3-3 with the loss.
The White Sox will go for the sweep on Sunday. The Royals, on the other hand, have lost four games in a row.
"As an offensive group, we haven't come together as a team," Royals manager Ned Yost said. "Is it taking longer than we would like for it to take? Yeah, absolutely. But you keep working at it."
The Royals' best chance came in the eighth when Eric Hosmer hit a triple off of Chicago reliever Jesse Crain that fell between center fielder De Aza and right fielder Alex Rios.
"It was miscommunication," White Sox manager Robin Ventura said. "[De Aza] called him off and didn't see [Rios] was camped under it."
With one out and a runner on third, Salvador Perez stepped up and popped to Keppinger at second base. Designated hitter Billy Butler then walked, but Lorenzo Cain struck out as Crain extended his franchise record to 29 consecutive scoreless appearances.
"Luckily, we had Jesse in there," Ventura said. "You make a mistake and you still have a guy who can get you out of it. He has just been tough with guys in scoring position. He's not afraid to throw anything."
The Royals went down in order in the ninth against White Sox closer Addison Reed to end the game.
Royals starter Wade Davis helped keep the game close by allowing only two runs with six strikeouts and two walks in seven innings.
"We had some chances and Wade threw well," Butler said. "It was a game we should have won. We had a lot of chances there. Crain made some good pitches there on the end and didn't give in. They made good pitches when they had to. That was one of the games we should have won."
Maybe so, but after starting off the month of June 12-4, the Royals have dropped to 12-8, mustering three or fewer runs in each of their last four losses while dropping to four games under .500.
"I think we're all scratching our heads," Yost said. "The consistency of our offense, for me, has been a little bit mind boggling."
After being nearly shut out the previous night, the Royals were the first to score on Saturday. With two outs and a full count, Mike Moustakas knocked in a run on a double that dropped into right field in the second inning.
It was Moustakas' first RBI since May 23. Later in the game, he singled to extend his streak to three consecutive multihit games and push his average above .200 for the first time since May 13.
"I'm feeling OK. I would be feeling a little bit happier if we got the win these last couple games," Moustakas said. "I'm out here to help us win ballgames, and today we didn't get it done."
Davis held the White Sox scoreless through the first three innings, but ran into trouble in the fourth. He walked Adam Dunn to lead off the inning and Paul Konerko reached on a single that rolled past shortstop Alcides Escobar. Conor Gillaspie followed with an RBI single to center field to tie the game. Keppinger then put the White Sox ahead with an RBI single.
Escobar sent a double rolling down the third-base line to start the sixth. One out later, Perez tied it up with an RBI single to left field. After walking Butler, White Sox starter Jose Quintana exited the game. He pitched 5 1/3 innings and gave up two runs on five hits.
"Sometimes you get the job done and sometimes you don't get it done," Moustakas said. "You tip your hat, and we won't let it happen again."