Florida's wobbly defense ended the pitchers' duel.
The Mets scored their first two runs on errors, and Carlos Beltran's two-run double broke the game open to help them win 6-2 Friday night.
"It just sort of snowballed," said Paul Lo Duca, who went 4-for-5. "We got a couple breaks, and we took advantage of it."
New York's Orlando Hernandez, making his first start since April 24, allowed two hits and walked none in six shutout innings. Florida's Sergio Mitre was just as good, and the game remained 0-0 into the eighth.
"It keeps you on your toes," Mitre said. "There's no room for error."
Alas for the Marlins, they made two. New York scored in the eighth when second baseman Dan Uggla bobbled a two-out broken-bat grounder.
"Boneheaded," Uggla said.
Carlos Gomez again put the Mets ahead in the ninth by scoring on a throwing error by shortstop Hanley Ramirez. The Marlins, last in the NL in defense, have committed eight errors in their past three games.
With the score 1-all, Carlos Delgado walked to start the Mets' ninth against Renyel Pinto (0-2). Pinch runner Gomez stole second and took third on a bloop single by Lo Duca.
Ramirez fielded Shawn Green's grounder and went home, but the errant throw sailed and glanced off the glove of catcher Miguel Olivo before he could make the tag, allowing Gomez to score.
"We make the play, and it's a different game," Marlins manager Fredi Gonzalez said.
Jose Reyes and Endy Chavez hit one-out RBI singles off Justin Miller, and Beltran's double made it 6-1.
Aaron Heilman (5-2) won despite allowing a run in the eighth. Billy Wagner gave up a solo home run by Miguel Cabrera in the ninth before completing the five-hitter.
Alfredo Amezaga had two hits and a sacrifice fly for Florida.
Hernandez, activated before the game following a bout of shoulder bursitis, left after throwing 88 pitches.
"The shoulder feels OK," Hernandez said. "But I'm tired -- all over."
He gave up a single to Amezaga to start the game, then retired the next 17 batters before Amezaga singled again with two out in the sixth. Hernandez mixed speeds, often throwing in the low 70s to keep Florida's young hitters off balance.
"He never ceases to amaze me," Mets manager Willie Randolph said. "He threw a great ballgame. He's a consummate pitcher. It's good to have him back. Hopefully we can keep him in the lineup."
Mitre allowed eight hits and no walks in 7 2/3 innings but remained winless in 13 lifetime games in Miami.
"He keeps throwing like that, we'll get him a win here," Gonzalez said.
The crowd of 24,278 didn't include Gonzalez, who served a one-game suspension for going onto the field Thursday during a bench-clearing confrontation with Philadelphia one inning after he was ejected. Bench coach Carlos Tosca took over as interim manager, while Gonzalez watched on TV in the clubhouse.
With the game scoreless, New York's Damion Easley led off the eighth with a single, and following a forceout, Mitre gave up his only walk to Reyes. Another forceout put runners at the corners with two out.
Matt Lindstrom came on to face Beltran, who hit a grounder to the right of second base. Uggla tried to backhand the ball but failed to glove it, allowing the unearned run to score.
"I booted it," Uggla said. "I've got to make that play."
RF Green broke a bone in his right foot on a foul tip and left the game in the ninth inning. He said he hopes to be sidelined only a few days and avoid the disabled list. ... Hernandez has allowed one earned run in his past 20 innings while striking out 19. ... Plate umpire Joe West called a ball when Hernandez went to his mouth on the mound in the sixth, and again when Mets RHP Joe Smith did it in the seventh. ... The Marlins got a fluke out on a swinging bunt by David Wright in the seventh. The ball started foul, deflected off the edge of the grass cutout and rolled back fair to first baseman Boone, who tagged Wright for an easy putout.