Man of the Match Bernardo Silva inspired his side to a 4-0 victory, Madrid's joint-worst in the competition's history.
Advertisement
The Portuguese had time and space to pick a corner after a brilliant piece of play and gave City a well-deserved opener after 22 minutes of trying.
Silva then doubled their advantage as he guided a header from a loose ball in the net after Ilkay Gundogan's goalbound shot was blocked on 37 minutes.
Thibaut Courtois had earlier denied 52-goal Haaland twice with two absolutely stunning saves that might have left City thinking it wasn't going to be their night.
Advertisement
But once Silva broke their last line of defence, it was game over as the dominance continued well into the second half.
With Kyle Walker completely shutting down Madrid's danger man Vinicius Jr, Carlo Ancelotti seemed bereft of ideas, and was soon punished for it.
An Eder Militao own goal with 14 minutes to play ensured the comeback kings were well and truly put away, and there was even time for icing on the cake.
Advertisement
Advertisement
A beautiful piece of play saw the red-hot Gundogan pick out Julian Alvarez with a mouth-watering backheel, and the Argentine tucked away having only just come on the pitch.
Inter Milan await City in Istanbul on June 10, and the Italian giants will be having nightmares after watching their opponents latest heroics.