MIAMI -- Josh Johnson lost his no-hit bid in the sixth inning, shortly after a heckling New York Mets fan made him laugh. Things became more serious when he lost his shutout with two outs in the ninth.
But he was determined not to lose the game.
Johnson persevered through a shaky finish to close out a five-hitter Sunday, and the Florida Marlins scored two unearned runs to hand Johan Santana his first loss since June 28 by beating the Mets 2-1.
"I said before the game I was going to go eight or nine innings," Johnson said. "I finished what I started out to do. That's huge for me."
While Johnson pitched his second complete game in 45 career starts, Santana was just as good, allowing only three hits in seven innings and striking out 13. But left fielder Daniel Murphy dropped a fly ball in the second inning for an error that led to both Florida runs.
Santana (1-1) had made 18 starts in a row without a loss, winning 10 consecutive decisions.
"It's just one mistake that he made that cost us the whole ballgame," Santana said. "It was a fun game. Johnson did a great job, I was trying to do mine, and at the end he won."
Johnson (2-0) was on deck to bat in the fifth when a fan attempting to jinx him began hollering about his no-hitter.
"I just started laughing," Johnson said. "I'm sure it was a Mets person."
Luis Castillo ended the no-hit bid the next inning with a broken-bat single.
Johnson was one strike from a three-hit shutout when Carlos Delgado doubled. Carlos Beltran followed with an RBI single before Ryan Church's soft liner was caught by left fielder Brett Carroll, who made a backhanded, game-ending grab at the shoetops.
The pitching duel rushed by in 2 hours, 4 minutes.
"It's fun," Johnson said. "Santana is pounding the zone, I'm pounding the zone, the game is going fast. That's what you want -- a good tempo in the game. It makes the defensive players ready. It's fun to play in a game like that."
Johnson struck out seven, walked one and threw 113 pitches.
"That's probably the best stuff we've seen against us in a long time," Mets manager Jerry Manuel said.
The Marlins totaled only three hits but ended their season-opening homestand at 5-1, the best start in franchise history. They're tied with Atlanta for the lead in the powerful NL East despite the smallest payroll in the majors.
"You've got to love it," Marlins infielder Wes Helms said. "Hopefully, we can jump out to a good lead and keep playing good ball and not have to do too much when it comes to August and September. We want to win now."
The Mets went 3-3 on a season-opening trip and play their home opener Monday night against San Diego at new Citi Field.
Johnson retired 15 batters in a row during one early span, then pitched mostly from the stretch in the final four innings, when the Mets had all of their hits and seven baserunners.
They stranded runners at second in the sixth and seventh, and at the corners in the eighth. Despite the sunny, 82-degree weather, Johnson said he wasn't too tired in the ninth.
"I bet you I could have gone 10," he said. "I felt like I could. I've worked hard this offseason to get to this point where I can go this long, and maybe even longer."
However, manager Fredi Gonzalez said Johnson would have come out of the game if Church had reached in the ninth.
Santana, who departed for a pinch hitter after throwing 98 pitches, walked only one and even managed to keep Emilio Bonifacio off base. Florida's leadoff hitter, who came into the game leading the majors in batting and hits, went 0-for-4 to drop his average to .500.
Santana's 13 strikeouts were his highest total in two seasons with the Mets. He had beaten the Marlins in his five previous starts against them, but this time they made the most of their one big break.
Santana retired the first five batters before he walked Jeremy Hermida on a 3-2 pitch. When Cody Ross lifted a high fly to deep left, Murphy retreated awkwardly to the warning track before the ball deflected off his glove, which allowed Hermida to score.
Ronny Paulino's single on the next pitch brought home Ross for a 2-0 lead.
"I was lazy to the ball, and I was exposed for it," Murphy said. "I didn't get back, and it cost us two. It really put us in a hole. Inexcusable, and it can't happen. Johan threw the ball really well, and he deserved a lot better than that."
Jose Reyes was the Mets' lone baserunner until the sixth. He reached on a tap to the pitcher to start the game when first baseman Helms dropped Johnson's throw for an error, but was thrown out trying to steal.
With the score 2-0, the Mets' David Wright singled with one out in the seventh, and Bonifacio bobbled a potential double-play grounder for an error to put the tying run aboard. But Johnson overcame the mistake, turning a comebacker by Beltran into a 1-6-3 double play, then heading for the dugout with a pump of his fist.
"We made some mistakes behind him, and he covered it up," Gonzalez said. "That's what good pitchers do. And the other guy wasn't chopped liver."
Marlins 1B Jorge Cantu, who had seven RBIs in the first five games, sat out after aggravating a bruise on his left hand. Gonzalez said he expects Cantu back in the lineup for the team's next game Tuesday at Atlanta. ... The crowd of 18,104 included former Mets ace Dwight Gooden. ... Johnson improved to 5-0 in six starts against the Mets with an ERA of 1.59. ... Wright, Delgado and Beltran -- batting 3-4-5 -- are a combined 5-for-45 lifetime (.111) against Johnson.