Hamilton recovered from losing the lead to Vettel at the start and banging wheels with his Ferrari F1 rival to pass in the final stint of the race and clinch his third victory of the season.
The Mercedes driver crossed the line 3.4 seconds clear of Vettel, to reduce the deficit to six points, with Red Bull's Daniel Ricciardo completing the podium.
Valtteri Bottas, who won the last race in Russia, was on course to finish third, but retired when his Mercedes engine expired with a third of the race to go.
At the start, Vettel had made a sensational getaway from second on the grid to move ahead of Hamilton into Turn 1.
Behind them, Kimi Raikkonen, Max Verstappen and Bottas tried to go three-abreast into the first corner, with Bottas clipping the rear of Raikkonen, pitching him into Verstappen.
Raikkonen and Verstappen's respective suspensions were broken by the contact, forcing both out of the race.
Up front, Vettel went about gradually increasing his lead before pitting for another set of softs at the end of lap 14.
The German was slow away because of a delay getting the front left tyre on.
Mercedes decided to keep Hamilton out, with the Briton immediately pumping in the fastest lap of the race and stretching his stint by an extra five laps.
Hamilton took on the mediums and rejoined behind Vettel, who was getting frustrated behind race leader Bottas - as the latter was running an even longer first stint than his teammate.
Vettel jinked one way, than the other, on the pit straight, running a couple of wheels on the grass as pulled side-by-side with Bottas before re-taking the lead.
Vettel set about building his lead over Hamilton before the latter pitted at the end of the virtual safety car period, caused when Stoffel Vandoorne ended up in the gravel at Turn 1 after banging wheels with Felipe Massa.
Hamilton rejoined on soft tyres, 24 seconds behind Vettel, but the German reacted immediately by pitting on the next lap and rejoining side-by-side with Hamilton.
Hamilton kept his foot in and tried to go around the outside but Vettel gave him the squeeze and they touched, with Hamilton taking to the run-off.
The Briton regrouped, got back on the attack and five laps later the move was done relatively easily using DRS on the main straight.
Hamilton then controlled the gap to Vettel behind to take his second victory of the season, while Ricciardo picked up his first podium finish of 2017.
Force India continued its impressive start to the season with Sergio Perez fourth and Esteban Ocon a career-best fifth.
Nico Hulkenberg secured his best result for Renault with sixth, with Pascal Wehrlein producing a stunning drive to cross the line seventh, only to be demoted to eighth because of an infringement.
Stewards handed the Sauber driver a five-second time penalty, applied at the end of the race, for failing to stay to the correct side of the pit entry bollard.
Carlos Sainz Jr, who was pitched onto the grass when he went side-by-side with Kevin Magnussen as they exited the pits, was classified as seventh.
Magnussen was set to ninth but picked up a puncture after contact with Daniil Kvyat, forcing him to pit at the end of the penultimate lap.
Kyvat finished ninth, with Romain Grosjean completing the top 10.
Fernando Alonso, who started seventh, saw the chequered flag for the first time this season with 12th.
12- 14 May 2017 Circuit de Barcelona-Catalunya, Catalunya
1 | 44 | Lewis Hamilton | MERCEDES | 66 | 1:35:56.497 | 25 |
2 | 5 | Sebastian Vettel | FERRARI | 66 | +3.490s | 18 |
3 | 3 | Daniel Ricciardo | RED BULL RACING TAG HEUER | 66 | +75.820s | 15 |
4 | 11 | Sergio Perez | FORCE INDIA MERCEDES | 65 | +1 lap | 12 |
5 | 31 | Esteban Ocon | FORCE INDIA MERCEDES | 65 | +1 lap | 10 |
6 | 27 | Nico Hulkenberg | RENAULT | 65 | +1 lap | 8 |
7 | 55 | Carlos Sainz | TORO ROSSO | 65 | +1 lap | 6 |
8 | 94 | Pascal Wehrlein | SAUBER FERRARI | 65 | +1 lap | 4 |
9 | 26 | Daniil Kvyat | TORO ROSSO | 65 | +1 lap | 2 |
10 | 8 | Romain Grosjean | HAAS FERRARI | 65 | +1 lap | 1 |
11 | 9 | Marcus Ericsson | SAUBER FERRARI | 64 | +2 laps | 0 |
12 | 14 | Fernando Alonso | MCLAREN HONDA | 64 | +2 laps | 0 |
13 | 19 | Felipe Massa | WILLIAMS MERCEDES | 64 | +2 laps | 0 |
14 | 20 | Kevin Magnussen | HAAS FERRARI | 64 | +2 laps | 0 |
15 | 30 | Jolyon Palmer | RENAULT | 64 | +2 laps | 0 |
16 | 18 | Lance Stroll | WILLIAMS MERCEDES | 64 | +2 laps | 0 |
NC | 77 | Valtteri Bottas | MERCEDES | 38 | DNF | 0 |
NC | 2 | Stoffel Vandoorne | MCLAREN HONDA | 32 | DNF | 0 |
NC | 33 | Max Verstappen | RED BULL RACING TAG HEUER | 1 | DNF | 0 |
NC | 7 | Kimi Räikkönen | FERRARI | 0 | DNF | 0 |
Note - Wehrlein had a 5-second penalty applied to his race time for failing to keep to the right of the pit-entry bollard.
1 | Sebastian Vettel | GER | FERRARI | 104 |
2 | Lewis Hamilton | GBR | MERCEDES | 98 |
3 | Valtteri Bottas | FIN | MERCEDES | 63 |
4 | Kimi Räikkönen | FIN | FERRARI | 49 |
5 | Daniel Ricciardo | AUS | RED BULL RACING TAG HEUER | 37 |
6 | Max Verstappen | NED | RED BULL RACING TAG HEUER | 35 |
7 | Sergio Perez | MEX | FORCE INDIA MERCEDES | 34 |
8 | Esteban Ocon | FRA | FORCE INDIA MERCEDES | 19 |
9 | Felipe Massa | BRA | WILLIAMS MERCEDES | 18 |
10 | Carlos Sainz | ESP | TORO ROSSO | 17 |
11 | Nico Hulkenberg | GER | RENAULT | 14 |
12 | Romain Grosjean | FRA | HAAS FERRARI | 5 |
13 | Pascal Wehrlein | GER | SAUBER FERRARI | 4 |
14 | Kevin Magnussen | DEN | HAAS FERRARI | 4 |
15 | Daniil Kvyat | RUS | TORO ROSSO | 4 |
16 | Marcus Ericsson | SWE | SAUBER FERRARI | 0 |
17 | Lance Stroll | CAN | WILLIAMS MERCEDES | 0 |
18 | Fernando Alonso | ESP | MCLAREN HONDA | 0 |
19 | Antonio Giovinazzi | ITA | SAUBER FERRARI | 0 |
20 | Jolyon Palmer | GBR | RENAULT | 0 |
21 | Stoffel Vandoorne | BEL | MCLAREN HONDA | 0 |
1 | MERCEDES | 161 |
2 | FERRARI | 153 |
3 | RED BULL RACING TAG HEUER | 72 |
4 | FORCE INDIA MERCEDES | 53 |
5 | TORO ROSSO | 21 |
6 | WILLIAMS MERCEDES | 18 |
7 | RENAULT | 14 |
8 | HAAS FERRARI | 9 |
9 | SAUBER FERRARI | 4 |
10 | MCLAREN HONDA | 0 |
Related News