"You can't pitch much better than Soup did," manager Ken Macha said. "Today he had to give up nothing for us to win, and that's what he did."
Suppan, who parlayed a 2006 NLCS MVP for the Cardinals into a free-agent contract, outpitched Wainwright in the first of 18 matchups between teams that entered the day tied for the NL Central lead. Suppan (3-3) is 131-126 for his career, but 9-2 with a 3.02 ERA in 20 starts in St. Louis and 7-2 with a 2.92 ERA in 12 starts against the Cardinals.
"It's a matter of whatever juice you have going against a team, you use it to aid your performance," Suppan said. "We're human beings, so of course we have emotions. But your preparation has to be the same, it's doing it on the field."
The Brewers won for the 10th time in 12 games, and for only the sixth time in franchise history with two or fewer hits. Wainwright (3-2) struck out seven and walked two in his longest outing of the year. He's lost his last two starts after winning nine straight decisions.
"It was a lot better," Wainwright said. "I definitely felt more in control of my body, my arm slot, everything."
Shane Robinson had two hits and a steal for the Cardinals, who have lost five of seven while missing Ryan Ludwick and Rick Ankiel. St. Louis was shut out for the first time this season.
"Any explanation is an excuse," manager Tony La Russa said. "I mean, there's guys banged up all over the league."
Suppan opened with four scoreless innings for the first time this season and faced the minimum in an inning twice, once aided by a double-play ball. But he limited the Cardinals to only four at-bats with runners in scoring position, all with two outs.
Shortstop J.J. Hardy dived into the hole to rob Skip Schumaker of a tying hit with two on in the seventh, producing a force play for the final out.
Mark DiFelice and Mitch Stetter worked a hitless eighth before Hoffman earned his ninth save in nine chances. Hoffman has allowed only three hits in 10 innings this season, and in five of his saves he's worked a perfect ninth.
He needed help from Hart, who caught Yadier Molina's drive at the wall to start the ninth.
"I took a look at Hoffman's reaction, and he was kind of breathing deep," Macha said.
Hart hit his first homer since April 13 in the second. The only other hit was Ryan Braun's single to start the seventh when Robinson just missed on a diving catch in right.
Wainwright fine-tuned his arm slot between starts, pinpointing it as the source of a handful of so-so outings. The Brewers didn't bat with runners in scoring position until the eighth, when Hart reached on an error and Bill Hall walked with none out, but Wainwright rallied with two strikeouts and a pop-up.
Ankiel, on the DL with a bruised right shoulder, is due to begin playing in extended spring training games this weekend and could rejoin the team next week. ... Hart was 3 for 18 with three RBIs against Wainwright entering the game. ... Cardinals SS Khalil Greene is in a 2-for-18 slump and has missed the last two starts. He grounded out as a pinch hitter in the seventh to replace rookie Tyler Greene, who made a couple of nice fielding plays to rob Braun and Rickie Weeks, then tapped out to third for the game's final out. ... The Cardinals' run of homering in nine straight games ended.