Carlos Zambrano won for the first time since his banishment for a dugout tantrum in June, and the Chicago Cubs won for just the third time in 17 games, 3-2 over St. Louis on Saturday.
Aramis Ramirez homered after missing three games with sore ribs. Derrek Lee also hit a solo home run for Chicago.
The Cardinals had won four in a row. Chris Carpenter (13-4) gave up three runs in six innings. He was 4-0 with a 1.79 ERA over his previous six starts.
Zambrano (4-6) allowed seven hits in 5 2-3 innings, struck out three and walked two. Carlos Marmol got the final five outs for the save, his 20th in 24 chances but his first since July 26.
St. Louis manager Tony La Russa finished up a two-game suspension for his role in a brawl Tuesday at Cincinnati.
Zambrano has had a tough year — a 5.46 ERA entering the game and a dugout blowup with Lee on June 25 that led to the Cubs placing him on the restricted list. He was solid in his return start at San Francisco on Monday, allowing two runs in five innings in a no-decision, and better Saturday.
Zambrano struck out Colby Rasmus three times and cooled off one of baseball's hottest teams — St. Louis had scored at least four runs every game this month and was hitting .306 for August coming into the game.
Not that it was surprising — Zambrano is 5-0 lifetime at Busch Stadium.
Carpenter is certainly used to the stifling St. Louis heat and humidity of a St. Louis summer, but seemed to struggle on a 93-degree day with a heat index of 107 degrees. TV showed him in the dugout after the third inning with a wet towel draped over his head.
The two Cardinals aces — Carpenter and Adam Wainwright — were a combined 20-2 at Busch Stadium this season. Carpenter was 9-2 with a 2.75 ERA at home before Saturday. He allowed six hits, struck out three and walked none.
The Cardinals scored in the first on a single by John Jay, a double by Albert Pujols and Matt Holliday's sacrifice fly.
Ramirez hit the first pitch of the second inning 408 feet for a homer, his 17th, into the Cubs bullpen in left field. The Cubs added another run in the second on Koyie Hill's RBI single.
Lee hit his 14th homer with two outs in the third.
St. Louis missed a two-out chance in the fifth when Holliday grounded out with the bases loaded. The Cardinals cut the margin to 3-2 in the sixth on a two-out single by Skip Schumaker, a wild pitch and a single by pinch-hitter Randy Winn.
The Cardinals had one last chance in the ninth when Aaron Miles led off with an infield single and went to second on Ramirez's throwing error. But Brendan Ryan popped out trying to bunt, Felipe Lopez fouled out and Allen Craig struck out.
NOTES: Lopez was 0 for 4 and is 2 for 32 since Aug. 6. ... The Cubs have used 15 rookies this season, tied with Detroit for the most in baseball. ... The sellout crowd of 46,313 was the second-largest of the season at Busch, behind only opening day. ... Kosuke Fukudome made a strong over-the-shoulder catch as he slammed into the right-field wall to rob Holliday of a fourth-inning hit. ... Pujols was 2 for 4 but failed to score a run for the first time in 12 games.