Lewis Hamilton took Mercedes' seventh win of the season in controversial circumstances after a stewards' decision stripped Sebastian Vettel of race victory.
A race-long tussle for the lead came to a head on lap 48 when Vettel ran wide in Turn 3 and cut the apex at Turn 4. As he rejoined the track, the Ferrari driver lost the rear of his car and cut across Hamilton on the exit of the corner, forcing the Mercedes towards the wall.
The pair avoided any contact but the incident was immediately referred to the stewards. Ten laps later they handed down a five-second penalty for Vettel, judging that he had rejoined the track in an unsafe manner and forced Hamilton off the track. On hearing the news, Vettel, who was still leading but had not had a five-second advantage all race, was furious.
"I had nowhere to go, seriously I had nowhere to go," he said. "I did see him."
He later added: "They are stealing the race from us."
From that point onwards, Hamilton only had to stay within five seconds of Vettel -- something he managed to do as he crossed the line with a 1.3s gap to the Ferrari. Although Hamilton closed on Vettel towards the end of the race, he admitted he would not be able to pass the Ferrari in a straight battle for the lead.
Vettel parked his car on the entry to the pit lane after the race and marched straight back to the paddock rather than take part in the post-race interviews. He eventually emerged in the winners' enclosure and put the No. 2 board in front of Hamilton's car, moving the No. 1 board to the position where he was supposed to park his car. He eventually emerged on the podium where Hamilton invited him to join him on the top step and Vettel reluctantly accepted.
The crowd later booed Hamilton before Vettel interjected and asked them to direct their frustration at the stewards. Asked what he felt, he said he expressed his emotions on the podium and told interviewer Martin Brundle to ask the crowd what they felt.
The second place finish is even more painful for Ferrari after a disappointing start to the season in which rivals Mercedes has taken seven straight victories. Due to the track layout, Montreal presented the best chance to win a race since Charles Leclerc suffered an engine failure while leading in Bahrain, and on pure pace Ferrari just about had the edge on Mercedes. Apart from the Turn 4 incident, Hamilton had never quite managed to get alongside Vettel, but had been closing since his pit stop on lap 28 and was consistently within a second of the Ferrari, offering him the overtaking aid on the straights.
A late push from Leclerc in the second Ferrari meant he was only a second off the penalised Vettel in the final classification -- but still made it Ferrari's first double appearance on the podium this year. Valtteri Bottas recovered from a poor qualifying performance to finish fourth at the end of the race. His 70 laps included a tight on-track fight with Daniel Ricciardo at one stage and a strategic battle with Red Bull's Max Verstappen, but he still emerged with 12 points for fourth and a bonus point for fastest lap.
Verstappen finished fifth after starting ninth on the grid ahead of a strong result for Renault, with Daniel Ricciardo sixth and Nico Hulkenberg seventh. Pierre Gasly started fifth but finished eighth in another disappointing race for Red Bull. Canadian driver Lance Stroll made a recovery drive from 17th on the grid to ninth to finish ahead of Daniil Kvyat in tenth.