"It was a shame one of them had to lose, especially when it's our guy," said Cardinals manager Tony La Russa. "I mean they were both dealing. Very tough."
Haren struck out eight for his 10th win of the year and lowered his Major League-leading ERA to 1.96.
"That's as good as anybody has pitched against us this year," La Russa said of Haren. "I mean his location was outstanding. Good stuff, good assortment.
"I think anything else that should be said about him, let [the D-backs] talk about it. They will enjoy it more than I will. But I tip my cap to him. We've had a lot of great pitching against us, and that's as good or better than most of them."
Wainwright suffered his second straight tough-luck home start after giving up one run in nine innings but earning a no-decision in the Cardinals' 2-1 win over San Francisco on July 1. It was Wainwright's fifth straight quality start and 12th of the season. He has gone at least seven innings in each of his past five starts, but the Cardinals are only 3-2 in that span.
The five hits were the fewest he had allowed since allowing three on June 5 to Colorado.
"Not good enough, we lost the game," Wainwright said. "But I was pitching against another really, really good pitcher. Anytime you give up two runs against a guy like that, you might be in trouble."
Wainwright gave up a run in the top of the fourth when three Arizona hits tied the game at 1. His only other mistake came on a wind-aided home run by Arizona catcher Miguel Montero, who hit a high fly ball that just escaped the glove of Ryan Ludwick in the right-field corner to make it 2-1 Arizona.
"The first run they scored was a couple seeing-eye singles and a soft liner to center on a couple pretty good pitches, and then that second run, a guy hit it really high and the wind pushed it a little bit," Wainwright said. "That game could have been the other way around."
A night after hitting two home runs, Pujols was again the Cardinals' only major source of offense. His third-inning single gave the Cardinals a short 1-0 lead. It was his Major League-leading 90th RBI of the season in the Cardinals' 93rd game.
"It kind of reminds me of when I was facing [Barry] Bonds when I was in Oakland," Haren said. "It's like impossible to get him out. The first at-bat, I just walked him, the second at-bat I tried everything, really. There's no one way to get him out. He's too good."
Mark DeRosa was 0-for-4 in his first game back after being activated from the disabled list earlier in the day. He came up as the tying run with one out in the eighth but grounded into a fielder's choice.
Arizona added to its lead in the eighth when Josh Kinney walked Haren with two outs and the bases loaded to make it 3-1. Kinney had just intentionally walked pinch-hitter Chris Young to load the bases for the pitcher's spot in the lineup, but D-backs skipper A.J. Hinch stuck with Haren and it paid off.
Joe Thurston's pinch-hit single in the ninth scored Ryan Ludwick and made it 4-2, but pinch-hitter Rick Ankiel followed with a flyout to center to end the game.
Ludwick extended his hitting streak to 11 games with a 2-for-4 performance at the plate and is now hitting .404 in July. But he flied to left with two runners on base in the third inning as the Cardinals couldn't get much of anything going against the Arizona ace.
"We figured with Waino and Haren, it was going to be a low-scoring tough game," said infielder Brendan Ryan, who was 1-for-3 and scored the Cardinals' first run. "And it was, but it just went their way.
"[Haren's] as good as his numbers show. It's just a tough one to take."