Royals pitcher James Shields struck out 10 and scattered four hits over seven innings for his 100th career win, and the Royals beat Chicago 6-1 to ensure the White Sox of their worst record since 1970.
Shields (13-9) gave up just one run and walked one as Chicago lost its fourth straight.
"I'm really excited I got my 100th win today," Shields said. "I'm just proud of my season this year. A hundred wins in the big leagues is a pretty special moment."
Also receiving accolades was Royals third baseman Jamey Carroll, whose fourth-inning double was the 1,000th hit of his major league career.
"It's something one day you can look back and have a lot of pride in, when your kids are asking what that ball's for or what that jersey is all about," Carroll said, adding with a laugh, "only 22 more years to 3,000."
Carroll's teammates put a bottle of 1,000 Island salad dressing in his locker as a memento of his achievement.
The mood in the White Sox locker room was more somber.
At 62-98 and with two games remaining, the White Sox will finish with the second-most losses in franchise history, ahead of only the team that went 56-106 more than four decades ago.
"Nobody wants that," manager Robin Ventura said before the game of reaching 100 losses. "Is it going to be the big difference going into next year? Probably not, but nobody wants that."
The White Sox will finish last in their division for the first time since 1989 (69-92), and will end the season with a losing record against every team in the American League.
The Royals' 85th win is their most since 1989 when they were 92-70.
The Royals took a 3-0 lead in the first off White Sox starter Chris Sale (11-14).
"To give Shields a 3-0 lead in the first, it's quite comforting," Royals manager Ned Yost said. "He's given us not only No. 1 starter stuff, he's provided great leadership, has been a great example for our guys. He's a big part of our season and why we're at 85 wins now."
Kansas City, which has won 21 of its last 31, made it 4-0 in the fourth on Carroll's milestone double and scored on Bonifacio's single.
Sale was lifted with one out in the top of the sixth. He gave up four runs and nine hits, walked one and struck out five. He also hit a batter.
"I think that's a reoccurring theme every year: My last (start is) always a bad one," Sale said. "Hopefully, I can fix that next year. I just didn't have it tonight."
Chicago's run came on Gordon Beckham's fifth home run of the season in the sixth. The following batter, Alexei Ramirez, appeared to follow with another homer, but Gordon grabbed the ball at the fence in left field.
Having fallen out of the wild card race, the Royals are playing out the string this weekend. But Yost is proud of what his team accomplished in the second half of the season: "We have more wins than anybody in the American League since the All-Star break except Detroit, and they're tied with us (coming into Friday). We feel like our organization has made great progress. We got to experience what it was like playing deep into September in a playoff race and it was great experience." . White Sox INF Jeff Keppinger had a successful debridement procedure on his right shoulder Thursday. Recovery will be two to three months. Keppinger should be back to full strength by the start of spring training. . White Sox 1B Paul Konerko, who will not make a decision on whether he'll retire or return for one more season for at least a month, needs just six bases to break Frank Thomas' team record for total bases (3,949).