Livan Hernandez scattered nine hits in the 46th perfect game of his career, improving to 4-1 on the year.
Hernandez (4-1) worked around nine hits in going the distance for the 46th time in his career, most recently in May 2008 with Minnesota.
Zimmerman's streak of safely reaching base ended at 43 games. He went 0 for 4 and struck out twice, falling three games short of the franchise record set by Rusty Staub for Montreal from 1969-70.
No Mets starter had even reached the eighth inning this year, and Hernandez delivered on a drizzly night when New York trotted out a depleted lineup. The Mets put All-Star shortstop Jose Reyes and outfielder Ryan Church on the disabled list before the game, and plan to hold out Carlos Beltran until the weekend because of a bruise below his knee.
Highly touted Fernando Martinez got an RBI in his major league debut and Gary Sheffield hit a three-run homer in the seventh inning to break it open. A day after umpires looked at replays to verify he'd homered, Sheffield left no doubt with the 504th of his career.
On his first pitch after giving up the homer, reliever Jason Bergmann threw a pitch over Fernando Tatis' head. Plate umpire Dan Iassogna warned the teams against further beanballs, and Nationals manager Manny Acta came out to discuss it.
Tatis was nicked in the left shoulder later in that at-bat and calmly took first base. Hernandez plunked pinch-hitter Justin Maxwell in the leg in the eighth, and there were no problems.
Hernandez, listed as 34 years old, walked one, struck out six and threw 127 pitches. He won with a familiar formula — pitching in and out of trouble. Opponents came into the game batting .307 against him, and the Nationals hit him, too.
Adam Dunn singled for his 1,000th hit, then cracked his 15th home run in the seventh. His drive to left was only the second opposite-field shot in 22 games at Citi Field — Washington's Nick Johnson also did it on April 24.
Craig Stammen (0-1) lost in his second big league game. He did, however, get his first hit in the majors.
Bard tried to score from second on Stammen's two-out single in the fifth. Santos missed the tag but Bard slid wide past the plate, and they both dived for home. Santos tagged Bard inches short.
Santos and Ramon Martinez hit doubles with two outs in the second for a 1-0 lead. The Mets made it 3-0 in the third on Fernando Tatis' run-scoring grounder and 20-year-old Martinez's RBI forceout.