Tim Raines had two hits and scored two runs to lead Montreal at home.
Winner David Palmer (7-9), making his first start in seven weeks, went five innings. He allowed five hits and walked three. Jeff Reardon pitched the final two innings for his league-leading 36th save.
"It felt like I was pitching for the first time this year," said Palmer, who was on the disabled list for nearly a month with a stiff shoulder. "I just tried to do what I always do, go after the hitters instead of trying to nibble at the corners."
Raines led off the first inning with a double off Sid Fernandez (6-9). He went to third on a groundout and scored on Hubie Brooks' slow roller to shortstop.
The Mets tied the game in the third on Mookie Wilson's double and Keith Hernandez's RBI single.
The Expos took the lead for good in their half of the third as Raines hit a drive off Fernandez's leg and went all the way to third when third baseman Howard Johnson picked up the ball and threw wildly past first. Vance Law followed with a sacrifice fly.
The Expos scored in the fifth on Jim Wohlford's RBI single, in the sixth on Mike Fitzgerald's sacrifice fly and in the eighth when Tim Wallach, who doubled, scored on catcher Gary Carter's second throwing error of the game.