PHOENIX -- The Arizona Diamondbacks made a seven-run lead stand up this time.
One run would have been enough with All-Star Dan Haren on the mound.
One night after blowing a seven-run lead -- the biggest collapse in team history -- the Diamondbacks jumped to a 7-0 fourth-inning margin on Florida starter Ricky Nolasco (6-7), who lost for the first time since June 7.
Haren (9-5) made sure it wouldn't happen two nights in a row, tossing a four-hitter for his third complete game of the season and ninth of his career. Haren's other shutout came Sept. 16, 2008, against San Francisco.
"What a performance," Arizona manager A.J. Hinch said. "Obviously, a good offensive night for us, too. Really, just what we needed after getting hit in the mouth a little bit last night. It was a great rebound game for us."
Haren struck out 10 and walked one in a 117-pitch outing as the Diamondbacks won for the sixth time in seven games.
"That sets off the fire alarms around here when he walks a guy," Hinch said.
Haren, who whittled his NL-best ERA to 2.01, made a strong case to start the All-Star game in St. Louis next week. He's come a long way since losing his first three starts by scores of 3-0, 3-1 and 2-0.
"The way the year started, being 0-3, battling back and having nine wins by the [All-Star] break is nice," Haren said. "But more importantly, the team has won six out of the last seven or so and we're just playing better in general."
Haren kept the Marlins fishing with an array of cutters and fastballs. He was so dominant that Hanley Ramirez, whose .348 batting average leads the NL, did not get the ball out of the infield in four at-bats. Ramirez went 1-for-4 with an infield single.
"I had good stuff, and getting a lead early was also nice," Haren said. "That's not an easy lineup to go through, especially with Hanley in there."
Haren gave up a leadoff single to Chris Coghlan, then retired the next 11 batters. Ross Gload broke up the streak with a ground-rule double with two outs in the fourth, but Haren struck out Dan Uggla to end the threat.
Haren allowed two-out singles in the fifth and sixth, but gave up only a walk the rest of the way. He closed with a flourish, retiring the last nine batters. He struck out Uggla for the third time to end the game, bringing the Chase Field crowd of 21,307 to its feet.
"You've got to tip your hat to Danny because he was terrific," Florida manager Fredi Gonzalez said.
Nolasco had gone 4-0 in his last five starts, but he lacked command against the feeble-hitting Diamondbacks, who entered with a .245 team batting average, 15th in the NL.
The Diamondbacks took a 1-0 lead on Miguel Montero's fifth home run, to the right field seats, and they made it 2-0 on Stephen Drew's RBI triple in the third. Drew, who had been 1-for-13 against Nolasco, also had a double.
Arizona erupted for five runs in the third -- all with two outs.
Alex Romero's triple made it 3-0, and then Haren dribbled a 20-foot single down the third-base line to score Romero.
"That's about as lucky as you can get right there," said Haren, who is hitting .268 with five RBIs.
Lopez followed with a shot to the pool area in right-center field, his sixth.
"They put some good swings on the ball," said Nolasco, who went six innings, allowing seven runs on nine hits. He struck out eight and walked one.
Arizona 3B Mark Reynolds struck out twice to boost his majors-leading strikeout total to 119. ... Marlins SS Ramirez started for the first time in five games. Ramirez, voted to start the All-Star game, had been nursing a right hip flexor. ... Arizona RHP Tom Gordon, out with a strained left hamstring, pitched batting practice Friday and is scheduled to start a rehab stint at Single-A Visalia on Monday.