In a frantic finish under heavy rain at Spa, the lead changed hands in a flurry of activity as first Nico Rosberg, Mark Webber and Vettel all beat each other's times, only for Hamilton to go fastest for the fifth time this season.
Hamilton let out a long scream of delight on crossing the line. The British driver won the previous GP in Hungary last month and needs another win in Spa to keep the pressure on championship leader Vettel.
Mercedes has won three of the past five races.
Webber qualified third ahead of Rosberg.
Qualifying times from the Formula One Belgian Grand Prix at Spa Francorchamps on Saturday:
Session 3
1. Lewis Hamilton (GBR) Mercedes 2:01.012, 2. Sebastian Vettel (GER) Red Bull-Renault 2:01.200, 3. Mark Webber (AUS) Red Bull-Renault 2:01.325, 4. Nico Rosberg (GER) Mercedes 2:02.251, 5. Paul di Resta (GBR) Force India-Mercedes 2:02.332, 6. Jenson Button (GBR) McLaren-Mercedes 2:03.075, 7. Romain Grosjean (FRA) Lotus-Renault 2:03.081, 8. Kimi Raikkonen (FIN) Lotus-Renault 2:03.390, 9. Fernando Alonso (ESP) Ferrari 2:03.482, 10. Felipe Massa (BRA) Ferrari 2:04.059
Session 2
1. Kimi Raikkonen (FIN) Lotus-Renault 1min 48.296sec (Q), 2. Fernando Alonso (ESP) Ferrari 1:48.309 (Q), 3. Nico Rosberg (GER) Mercedes 1:48.552 (Q), 4. Mark Webber (AUS) Red Bull-Renault 1:48.641 (Q), 5. Jenson Button (GBR) McLaren-Mercedes 1:48.641 (Q), 6. Sebastian Vettel (GER) Red Bull-Renault 1:48.646 (Q), 7. Romain Grosjean (FRA) Lotus-Renault 1:48.649 (Q), 8. Paul di Resta (GBR) Force India-Mercedes 1:48.925 (Q), 9. Felipe Massa (BRA) Ferrari 1:49.020 (Q), 10. Lewis Hamilton (GBR) Mercedes 1:49.067 (Q)
Did not qualify for third session
11. Nico Hulkenberg (GER) Sauber-Ferrari 1:49.088, 12. Adrian Sutil (GER) Force India-Mercedes 1:49.103, 13. Sergio Perez (MEX) McLaren-Mercedes 1:49.304, 14. Giedo van der Garde (NED) Caterham-Renault 1:52.036, 15. Jules Bianchi (FRA) Marussia-Cosworth 1:52.563, 16. Max Chilton (GBR) Marussia-Cosworth 1:52.762
Session 1
1. Fernando Alonso (ESP) Ferrari 2:00.190 (Q), 2. Lewis Hamilton (GBR) Mercedes 2:00.368 (Q), 3. Giedo van der Garde (NED) Caterham-Renault 2:00.564 (Q), 4. Nico Rosberg (GER) Mercedes 2:01.099 (Q), 5. Kimi Raikkonen (FIN) Lotus-Renault 2:01.151 (Q), 6. Jenson Button (GBR) McLaren-Mercedes 2:01.301 (Q), 7. Felipe Massa (BRA) Ferrari 2:01.462 (Q), 8. Mark Webber (AUS) Red Bull-Renault 2:01.597 (Q), 9. Nico Hulkenberg (GER) Sauber-Ferrari 2:01.712 (Q), 10. Sebastian Vettel (GER) Red Bull-Renault 2:01.863 (Q), 11. Jules Bianchi (FRA) Marussia-Cosworth 2:02.110 (Q), 12. Paul di Resta (GBR) Force India-Mercedes 2:02.338 (Q), 13. Sergio Perez (MEX) McLaren-Mercedes 2:02.425 (Q), 14. Romain Grosjean (FRA) Lotus-Renault 2:02.476 (Q), 15. Adrian Sutil (GER) Force India-Mercedes 2:02.749 (Q), 16. Max Chilton (GBR) Marussia-Cosworth 2:02.948 (Q)
Did not qualify for second session
17. Pastor Maldonado (VEN) Williams-Renault 2:03.072, 18. Jean-Eric Vergne (FRA) Toro Rosso-Ferrari 2:03.300, 19. Daniel Ricciardo (AUS) Toro Rosso-Ferrari 2:03.317, 20. Valtteri Bottas (FIN) Williams-Renault 2:03.432, 21. Esteban Gutierrez (MEX) Sauber-Ferrari 2:04.324, 22. Charles Pic (FRA) Caterham-Renault 2:07.384
Grid for Sunday's Formula One Belgian Grand Prix following qualifying on Saturday:
1st row
Lewis Hamilton (GBR/Mercedes)
Sebastian Vettel (GER/Red Bull-Renault)
2nd row
Mark Webber (AUS/Red Bull-Renault)
Nico Rosberg (GER/Mercedes)
3rd row
Paul di Resta (GBR/Force India-Mercedes)
Jenson Button (GBR/McLaren-Mercedes)
4th row
Romain Grosjean (FRA/Lotus-Renault)
Kimi Raikkonen (FIN/Lotus-Renault)
5th row
Fernando Alonso (ESP/Ferrari)
Felipe Massa (BRA/Ferrari)
6th row
Nico Hlkenberg (GER/Sauber-Ferrari)
Adrian Sutil (GER/Force India-Mercedes)
7th row
Sergio Perez (MEX/McLaren-Mercedes)
Giedo van der Garde (NED/Caterham-Renault)
8th row
Jules Bianchi (FRA/Marussia-Cosworth)
Max Chilton (GBR/Marussia-Cosworth)
9th row
Pastor Maldonado (VEN/Williams-Renault)
Jean-Eric Vergne (FRA/Toro Rosso-Ferrari)
10th row
Daniel Ricciardo (AUS/Toro Rosso-Ferrari)
Valtteri Bottas (FIN/Williams-Renault)
11th row
Esteban Gutierrez (MEX/Sauber-Ferrari)
Charles Pic (FRA/Caterham-Renault)