Mercedes' Hamilton claimed pole for F1's first Styrian GP ahead of Verstappen in a wet and wild qualifying session at Red Bull Ring.
Carlos Sainz grabbed third place for McLaren, with Austrian Grand Prix winner Valtteri Bottas finishing fourth.
Despite fears heavy rain would lead to a washout on Saturday after FP3's cancellation, qualifying got going 46 minutes later than scheduled as a break in the weather meant the action could take place on the extreme wet-weather tyres.
The fluctuations in the weathers' intensity meant Q2 had the fastest times of the three segments, but still came down to the final runs in Q3 as the water cleared from a late-Q2 rain surge.
Hamilton held the top spot ahead of the final runs but was under significant pressure from Verstappen, who saved two big snaps of oversteer at Turns 6 and 8 on his final flying lap but could not save a slide exiting the penultimate corner.
Although the Red Bull driver managed to avoid a full 360 his chances of pole were dashed and Hamilton in any case improved his best Q3 time to a 1m19.273s to end up 1.216s clear.
Sainz popped into third to take his best F1 career starting spot, with Bottas taking fourth despite setting his best Q3 time at the death.
Esteban Ocon took fifth for Renault ahead of Lando Norris, who will drop three grid spots for his FP1 penalty for overtaking under yellow flags.
Alex Albon was seventh in the second Red Bull ahead of Pierre Gasly's AlphaTauri, with Daniel Ricciardo ninth.
Sebastian Vettel rounded out the Q3 runners in another disappointing qualifying showing for Ferrari.
Behind the top 10, Charles Leclerc became the second Ferrari driver in a week to be knocked out in Q2 as he could not improve on his final laps in the middle segment.
Leclerc had indicated he wanted to stay out on his initial Q2 wets when it came to putting a fresh set on for the final runs, but when he did come in the rain intensified and few drivers managed to improve their times late on.
Leclerc was told to push all through his final runs, but his final lap was 1.3s down on his Q2 best and he will start 11th – as Vettel did a week ago.
George Russell will start an F1 career-best 12th as he got Williams into Q2 – something it did not do once in 2019 – with a late rapid run on fresh wets in Q1.
Russell then posted a strong early Q2 effort, which helped him hold onto his high grid spot as the rain that thwarted Leclerc also frustrated Lance Stroll, Daniil Kvyat and Kevin Magnussen.
Stroll did look like he might be able to improve on his final run, but after a strong start his last lap got slower as it went on and then running wide at the exit of Turn 9 cost him and he will line up P13.
When Q1 did get underway, Vettel headed the queue to get out of the pitlane when the delayed session finally started and it was an ever-changing order as the drivers explored the soaking track.
Hamilton ended up quickest in the first segment, which was ended early after Antonio Giovinazzi spun as he ran across the kerbs at the exit of penultimate corner, spearing off into the barriers at the final turn.
He was able to drive clear by dropped debris on the pit straight and eventually stopped on the approach to Turn 4 – where Hamilton and Albon clashed in the closing stages of last weekend's Austrian GP – which meant the red flags were shown.
That meant few drivers were able to improve on fresh wets, with Kimi Raikkonen and Sergio Perez heading those knocked out in Q1 – with the latter the most high-profile exit after finishing Friday with the day's third fastest time.
Unlike Russell, Nicholas Latifi, who skated across the Turn 6 gravel mid-way through Q1, was unable to improve on his new wets as the red flags came out as he approached the final corners and he will start 18th as a result, ahead of Giovinazzi.
Romain Grosjean did not set a time in Q1 after going off at Turn 4 on his out-lap – just in front of Vettel's opening lap in the segment – and he did reappear after returning to the pits after that incident.
|2||Max Verstappen||Red Bull||1'20.489||1.216|
|3||Carlos Sainz Jr.||McLaren||1'20.671||1.398|
|6||Alex Albon||Red Bull||1'21.011||1.738|
|13||Lance Stroll||Racing Point||1'19.645||0.372|
|16||Kimi Raikkonen||Alfa Romeo||1'21.372||2.099|
|17||Sergio Perez||Racing Point||1'21.607||2.334|
|19||Antonio Giovinazzi||Alfa Romeo||1'21.831||2.558|
|View full results|