The White Sox won for the sixth time in seven games, continuing a late-season rush that came too late for them to successfully challenge Minnesota for the American League Central title.
Pierzynski tied it at 1-1 in the fourth and Chicago took the lead with a three-run seventh. Omar Vizquel singled in the first run of the inning and scored the last one on a base hit by Manny Ramirez.
Garcia (12-6) gave up both Boston runs to win his first game in a month. He sat out two weeks in that stretch with a sore back.
Josh Beckett (6-6) gave up four runs on 11 hits in six-plus innings to take the loss.