"Luckily we scored some runs and I was able to make it through five innings and let the bullpen take over," Morris said. "I was happy to get through it. It was 80 pitches and it felt like 120."
Mark Grudzielanek had three hits and three RBI and Abraham Nunez had two hits and three RBI for the Cardinals, who are an NL-best 60-32 and have won 10 of 12. They are 6-1 against the Brewers and 30-9 against the NL Central.
"I don't make anything of it until the season is in the book," manager Tony La Russa said. "The Milwaukee club, they've got a lot of live talent out there and they just came off beating Washington and Atlanta."
Geoff Jenkins hit a two-run homer for Milwaukee, which had won five of its previous six games. Carlos Lee singled twice and doubled his first three at-bats after entering 0-for-23 against St. Louis this season, and Rickie Weeks hit an upper-deck solo homer to left in the ninth, a drive off Cal Eldred estimated at 460 feet.
But Milwaukee committed two early errors, both by Weeks, that led to two unearned runs that helped the Cardinals pull away.
"I've got to learn to slow down and let the game come to me," Weeks said.
Pujols walked and scored in the first, singled and scored in the third, hit his 24th homer with a man on in the fourth and doubled in the sixth before fouling out in the seventh. He is batting .464 (13-for-28) against Milwaukee this year with three homers and nine RBI.
"Albert's having an Albert year," La Russa said. "He's just such a tough out."
Morris (11-2) scattered eight hits over five innings, allowing two runs. He labored through most of the outing, then finished by striking out Jenkins and Bill Hall with two on in the fifth.
Morris is 11-4 against the Brewers, although this was his first victory against them since 2003.
Santos, 0-6 in eight starts since beating Colorado on May 24, gave up six runs -- five earned -- and seven hits in three innings, his shortest outing this year. In his last four starts, none of them longer than five innings, Santos has allowed 16 earned runs in 17 1/3 innings.
"He's just not getting the ball down," manager Ned Yost said. "When he got hurt, he got the ball up. We should have made some plays for him that we didn't make but he was behind on the big hitters."
Nunez, starting at third with Scott Rolen resting after undergoing tests earlier in the day, had a two-run double in the third and an RBI single in the sixth. Grudzielanek's RBI single in the third made him 11-for-21 against Santos, and he added run-scoring singles in the fourth and sixth.
Walker had an RBI double in the first and an RBI single in the third, leaving him one shy of 1,300 career RBI.
- The Cardinals have scored 135 of their 469 runs in the first and second innings.
- Pujols is 6-for-12 against Santos.
- Walker, lifted for a pinch runner in the fourth with the Cardinals leading 8-2, is 10-for-23 during a seven-game hitting streak.
- Jenkins is batting .429 (18-for-42) during his 11-game hitting streak.
- Cardinals starters lead the majors, by far, with 53 victories.