Manchester City hade med sig en 2–1-ledning efter hemmamatchen och var favorit. Men i första halvlek väcktes minnena från de senaste tre säsongerna till liv när laget fått lämna turneringen i kvartsfinal.
Första 45 minuterna tillhörde en 17-årig engelsman – men han spelade inte i City.
Jude Bellingham gjorde ledningsmålet för Dortmund i den 15:e minuten. Han plockade upp ett blockerat avslut, lade över bollen på högerfoten och avslutade vackert i bortre krysset.
– Vi spelade inte alls bra första 15 minuterna, vi hade det svårt och vi var inte modiga nog och vi var rädda för att förlora. Det var uppenbart, säger Citymittfältaren İlkay Gündoğan till BT Sport.
City vände
Manchesterlagets spelmotor Kevin de Bruyne fick ett gratisläge efter slarv i Dortmundförsvaret men sköt i ribban. 17 minuter efter ledningsmålet fick Bellingham bli räddande ängel i defensiv riktning när han styrde bort ett avslut som passerat målvakten.
Men kvitteringen skulle komma.
Dortmunds mittfältare Emre Can nickade bort ett inlägg men träffade sin egen arm tidigt i andra halvlek. Domaren pekade på straffpunkten och Riyad Mahrez kunde kvittera.
Det dröjde till den 75:e minuten innan City satte spiken i kistan. 20-åringen Phil Foden gjorde 2–1 i första mötet, och i returmatchen ville han inte vara sämre.
Efter en kort hörna fick han bollen utanför straffområdet och drog på ett skott mot närmsta stolpen. Marwin Hitz i Dortmundmålet hann inte dit.
Foden rusade mot bänken och firade med en euforisk Pep Guardiola. Förbannelsen var bruten.
– Jag sa, "bra jobbat, fint skott, nu kör vi vidare", säger Guardiola till BT Sport.
– Jag är otroligt glad för klubben, för vår klubbordförande och för fansen, för alla.
Mållöst på Anfield
På Anfield skapade Liverpool chanser – men gjorda inga mål.
Det gjorde inte Real Madrid heller som tog sig vidare efter 3–1-segern i första mötet.
Redan efter två minuter fick stjärnan Mohamed Salah ett öppet läge, men avslutet var svagt och belgaren Thibaut Courtois i Real Madrids mål kunde avvärja med fötterna.
James Milner avlossade ett skott som Courtois enhandsräddade, och i slutet av halvleken fick både Georginio Wijnaldum och Salah skottlägen i straffområdet men båda sköt över.
– Om vi hade spelat första matchen med samma intensitet hade det varit väldigt annorlunda. Men totalt sett var vi inte bra nog över två matcher, säger Milner till BT Sport.
Liverpool behöll kommandot i andra halvlek, men avsluten blockerades, sköts utanför, över, på Courtois. Men inte i mål.
Det öppnades upp några kontringsmöjligheter för Real Madrid. Hjälten från första mötet, Vinícius Júnior, rann igenom i ett friläge men Alisson Becker kom utrusande och kunde rädda.
Men det förblev mållöst.
Real Madrid ska möta Chelsea i semifinal, medan Manchester City ställs mot Paris SG.