On the first lap, surprise third-placed qualifier for Williams, Valtteri Bottas, started to tumble down the order as Mark Webber and Alonso breezed past.
But it was business as usual for world champion Vettel, who had totted up a four-second lead over Hamilton within the first eight laps and sealed his first ever win in Canada.
Kimi Raikkonen – starting in tenth after a one-place grid penalty for a pit lane infraction – was struggling to find pace, having only moved up to eighth by lap 12.
During the first round of pit-stops, Mercedes’ Nico Rosberg got the jump on Webber for third and started to hold up the faster Red Bull.
As the Monaco Grand Prix winner kept Webber at bay, Hamilton swept into the pits on lap 20 and rejoined the track several seconds in front of both.
McLaren had won five of the last seven Canadian Grand Prix but Jensen Button was toiling away in 16th midway through the race, while Sergio Perez fared little better in 12th.
On lap 31, Webber finally got the better of Rosberg – though now had Alonso in his mirrors after the Spaniard took advantage of the pair’s scrap.
Meanwhile, Vettel lapped Raikkonen – who was second-place in the Drivers’ Championship before the race – and was building on an ominous 15-second lead over Hamilton.
But his Red Bull teammate Webber saw a chunk of his front-wing carved off on lap 38 as Caterham backmarker Giedo van der Garde left too little room while cornering.
It took a further four laps for the Australian to fall prey to Alonso, who turned his attention to chasing down second-placed Hamilton.
The former McLaren teammates toed and froed before Alonso – going wheel-to-wheel with Hamilton on the home straight – secured second place with seven laps remaining.
However, the Spaniard was left with too much work to do to catch Vettel, who clinched victory with 15 seconds to spare.
1. Sebastian Vettel Germany Red Bull-Renault 70 laps 1hr 32m 09.143s
2. Fernando Alonso Spain Ferrari-Ferrari +00m 14.4s
3. Lewis Hamilton Britain Mercedes-Mercedes +00m 15.9s
4. Mark Webber Australia Red Bull-Renault +00m 25.7s
5. Nico Rosberg Germany Mercedes-Mercedes +01m 09.7s
6. Jean-Eric Vergne France Toro Rosso-Ferrari +1 lap
7. Paul di Resta Britain Force India-Mercedes +1 lap
8. Felipe Massa Brazil Ferrari-Ferrari +1 lap
9. Kimi Raikkonen Finand Lotus-Renault +1 lap
10. Adrian Sutil Germany Force India-Mercedes +1 lap
11. Sergio Perez Mexico McLaren-Mercedes +1 lap
12. Jenson Button Britain McLaren-Mercedes +1 lap
13. Romain Grosjean France Lotus-Renault +1 lap
14. Valtteri Bottas Finland Williams-Renault +1 lap
15. Daniel Ricciardo Australia Toro Rosso-Ferrari +2 laps
16. Pastor Maldonado Venezuela Williams-Renault +2 laps
17. Jules Bianchi France Marussia-Cosworth +2 laps
18. Charles Pic France Caterham-Renault +3 laps
19. Max Chilton Britain Marussia-Cosworth +3 laps
Rtd Esteban Gutierrez Spain Sauber-Ferrari 63 laps completed
Rtd Nico Hulkenberg Germany Sauber-Ferrari 45 laps completed
Rtd Giedo van der Garde Holland Caterham-Renault 43 laps completed