Vettel, who trails Hamilton by 14 points in the title race, took pole position with a track record of the Circuit Gilles Villeneuve to finish ahead of Valtteri Bottas.
Red Bull’s Max Verstappen placed third in the dying moments of a thrilling qualifying session to bump championship leader Hamilton further down the order.
Ferrari driver Kimi Raikkonen will line up in fifth, with Monaco Grand Prix winner Daniel Ricciardo sixth for Red Bull.
Verstappen’s crash last time out in Monaco marked his fifth big mistake from six rounds, and he arrived in North America threatening to “headbutt someone” following a series of questions about his accident-prone campaign.
The 20-year-old has been in impressive form this weekend, but the lack of Renault power in the final sector of this high-power circuit cost him the chance to usurp Vettel as the sport’s youngest-ever pole sitter.
Red Bull team principal Christian Horner congratulated Verstappen on finishing third, with the Dutchman replying: “I guess it shows I still know how to drive.”
Verstappen added: “I’m very happy with this weekend. The car has been working really well and we know in qualifying we are missing top speed.
“We have the pace to take the fight to Ferrari and Mercedes. Starting on the softer tyre is a benefit as it’s quite slippery on track and in the race I think we’ll be competitive.”
Vettel is winless from the last four races but he is now in a strong position to ensure that does not extend to five rounds after edging out Bottas by only eight-hundredths of a second.
“I got the job done,” Vettel said. “Yesterday we were in trouble in practice as I wasn’t really happy with the car because we had some problems and I couldn’t get the rhythm.
“But today we switched on. The car was incredible, and it just kept getting quicker.”
Hamilton was on course to challenge Vettel for pole, but went in too deep on his brakes at the hairpin and crossed the line adrift of his championship rival.
Fernando Alonso is celebrating his 300th grand prix here this weekend, becoming only the fourth driver in F1 history to reach the landmark.
But the two-time champion, and indeed his British team, had little to toast yesterday after a thoroughly underwhelming performance.
Alonso qualified 14th, one place ahead of his team-mate Stoffel Vandoorne, to mark his worst grid position in Canada since his opening season at minnows Minardi in 2001.
It has been another weekend to forget for Williams, too. The Oxfordshire team have scored the fewest points of all this year, and Canadian teenager Lance Stroll and Sergey Sirotkin could manage only 17th and 18th respectively.
It would have been worse, but for Romain Grosjean’s dramatic engine blow-up and Marcus Ericsson clipping the wall. Grosjean failed to set a lap, while Ericsson limped back to his Sauber garage with terminal damage.