Sebastian Vettel secured his third successive pole in Canada after mastering the slippery conditions in Montreal.
The reigning world champion set a time of 1:25.425 to beat Lewis Hamilton by almost a tenth of a second.
Williams's Valtteri Bottas was the star of the show as the Finn set the third fastest time in Q3.
Monaco Grand Prix winner Nico Rosberg was fourth, ahead of Mark Webber and Fernando Alonso.
Jean-Eric Vergne was seventh, with Adrian Sutil, Kimi Raikkonen and Daniel Ricciardo rounding out the top 10.
The session started in slippery conditions, with drivers opting to head out in Q1 on slick tyres.
But the track was too wet, forcing everyone to immediately change to Intermediates.
A gearbox problem resulted in an angry Paul di Resta failing to progress through to Q2 for the second successive weekend. Another surprise name out of Q1 was Romain Grosjean, who struggled to get heat into his tyres and will start the race from last place.
Conditions worsened in Q2 but it was Felipe Massa who suffered the most. The Brazilian made an error under braking for turn three and crashed out, causing the session to be stopped.
With two minutes remaining on the clock, there was a frantic run to the line and Jenson Button failed to start another timed lap. A few drivers did improve, knocking Sauber's Nico Hulkenberg out of the top 10. He will start from eleventh place, ahead of Sergio Perez, Pastor Maldonado, Button, Esteban Gutierrez and Massa.
It was the first time this season that neither McLaren driver progressed through to Q3.
Conditions improved slightly in Q3 as drivers emerged on track still on Intermediate tyres. Vettel grabbed provisional pole, followed narrowly by Hamilton.
Bottas, who had been near the front in Q1 and Q2, continued to impress by setting the third fastest time.
Times improved in the first two sectors, but no-one was able to set faster times in sector three, ensuring that Vettel will start from the front of the grid on Sunday.