Manchester City held off a late surge by Atletico Madrid on Wednesday as a bad-tempered stalemate at the Wanda Metropolitano saw Pep Guardiola's side safely through to the Champions League semi-finals.
Kevin De Bruyne's first-leg strike last week at the Etihad Stadium proved enough for City to claim a 1-0 victory on aggregate in Madrid, although the Belgian had to go off with an injury which, if serious, would be a hammer blow to their hopes of winning the treble.
Kyle Walker also hobbled off in the second half.
City will now face Real Madrid, with Liverpool up against Villarreal in the other semi to complete an all Spanish-English line-up in the last four.
A prickly contest boiled over in the final minutes when Atletico's Felipe was sent off for a wild swipe at Phil Foden, the City midfielder already with his head in a bandage from an earlier Felipe challenge.
The exchange sparked a mass brawl in the corner, which only checked Atletico's momentum as the hosts finally put an otherwise dominant City under pressure in the last 10 minutes.
Diego Simeone was widely criticised for Atletico's negative tactics in the first leg and there was only a minor shift here, with the plan still to keep the game tight ahead of a final push.
Atletico, though, could not find the goal they needed and instead City advance to the semis for a second consecutive year, in sight again of their first Champions League triumph.
After a rousing ceremony before kick-off that saw the words "Pride, Passion, Feeling" spelt out across the crowd, Atletico made a stirring start, harrying City high up the pitch and snapping at their heels in midfield.
Foden was clattered by Felipe, Stefan Savic bulldozed Ilkay Gundogan over and Walker poked a ball out of play, under stress from the Atletico press.
But City survived the early, physical onslaught and established control, even if Atletico looked a threat on the break, failing only with their final pass.
- Gundogan hits post -
City's possession should have told midway through the half when a wonderful Riyad Mahrez pass released Walker, whose cross evaded the sliding Atletico defenders and found Foden at the back post.
He teed up Gundogan for what looked a simple finish but the ball cannoned back off the post. In the scramble, Gundogan's headed rebound was blocked by Felipe.
Atletico, though, surged again after the restart, the crowd coming with them. Antoine Griezmann dipped a volley just wide of the post, Ederson lashed a nervy punt downfield and Marcos Llorente barged the ball off Joao Cancelo. Guardiola flapped on the sideline, trying to jolt his team back into life.
With 25 minutes left, De Bruyne was replaced by Raheem Sterling and soon after Simeone decided it was time to attack, Angel Correa, Yannick Carrasco and Rodrigo de Paul all coming on.
De Paul's first touch was to fire just past the post and City were retreating now, camped in their own half, accepting or unable to prevent the Atletico pressure.
Simeone rolled the dice, Luis Suarez and Matheus Cunha thrown on for the last eight minutes.
In the 86th minute, Correa chested down for Cunha but his finish was blocked by the left leg of John Stones. From the corner, Ederson failed to clear and the goal was gaping but Savic was unable to steer in.
A feisty contest erupted at the end when Foden was taken out again by Felipe, who swung his leg at the City midfielder on his way down. A swarm of players, substitutes and staff rushed in and it was only a few minutes later that Felipe was sent off.
With nine minutes of added time, Gundogan should have settled it for City but Atleti survived. De Paul tested Ederson with a free-kick. Llorente was down on the ground when the ball fell to him in the box. He had the last shot but Ederson parried away.