It was an extraordinary Derby della Madonnina, with Zlatan Ibrahimovic’s goal and red card, fight with Romelu Lukaku and last-gasp Christian Eriksen winner for Inter.
The winners of this clash will go on to face Juventus or SPAL in the semi-finals. These rivals are also battling for the Scudetto, as the Rossoneri were crowned Winter Champions despite a 3-0 defeat to Atalanta on Saturday, sitting two points clear of the Nerazzurri.
While Danilo D’Ambrosio was the only absentee for Inter, Milan missed Mario Mandzukic, Sandro Tonali, Pierre Kalulu, Matteo Gabbia, Ismael Bennacer and suspended Gianluigi Donnarumma.
Rafael Leao drilled inches wide in the opening couple of minutes, while Zlatan Ibrahimovic’s header was beyond both Brahim Diaz and the far post.
Simon Kjaer was booked for a late tackle on Alexis Sanchez and went down injured soon after, making way for Milan debutant Fikayo Tomori.
Romelu Lukaku gathered a Matteo Darmian through ball and turned Alessio Romagnoli, forcing a reaction save with Ciprian Tatarusanu’s foot.
However, Milan broke the deadlock when Ibrahimovic controlled on the edge of the box, took an extra touch and drilled the angled drive through Aleksandar Kolarov’s legs to bounce in off the inside of the far post.
Alexis Sanchez thought he’d equalised on 37 minutes with a header on Ivan Perisic’s cross, but it was cleared off the line first by Theo Hernandez, then Tomori.
Marcelo Brozovic’s fantastic volley from the edge of the box flew just past the far post, but the half-time whistle was overshadowed by a massive row between Lukaku and Ibrahimovic. The former Manchester United teammates had to be kept apart, with Lukaku absolutely furious, physically restrained by his teammates. The row had originally been sparked between Lukaku and Romagnoli, then others began to join in. Both forwards were booked, which means that if Inter get to the semi-final, Lukaku would be suspended for the first leg.
Achraf Hakimi came on for the second half and immediately set up Alexis Sanchez for a volley from six yards, testing Tatarusanu at the near post.
Tomori made a great block on Lukaku from another Hakimi low cross, but Ibrahimovic received a second yellow card for tripping Kolarov and was sent off.
Inter were pouring forward in waves and Leao went into an ill-advised sliding tackle on Barella in the penalty area. The referee didn’t have a clear view, but the decision after a VAR on-field review was inevitable, Lukaku firing the penalty in off the underside of the crossbar.
The drama wasn’t over, as play was halted for several minutes after referee Paolo Valeri suffered a thigh injury, so had to swap places with fourth official Daniele Chiffi. This means there had to be 10 minutes of stoppages.
The Inter siege continued, Hakimi’s shot smothered by Tatarusanu from the edge of the box, then Lautaro Martinez pounced on a dreadful back-pass to go clear on goal, only to fire straight at Tatarusanu.
The goalkeeper made another incredible save from point-blank range on Lukaku after a nonchalant combination with Lautaro.
Meite tripped Lautaro Martinez on the edge of the box and substitute Christian Eriksen curled a divine free kick into the near top corner to give Inter the lead just as extra time was looming.
Inter 2-1 Milan
Ibrahimovic 31 (M), Lukaku pen 71 (I), Eriksen 97 (I)
Inter: Handanovic; Skriniar, De Vrij, Kolarov (Young 92); Darmian (Hakimi 46), Barella, Brozovic (Eriksen 88), Vidal, Perisic; Lukaku, Alexis Sanchez
Milan: Tatarusanu; Dalot, Kjaer (Tomori 19), Romagnoli, Theo Hernandez; Kessie, Meite; Saelemaekers (Castillejo 85), Brahim Diaz (Rebic 60), Leao (Krunic 85); Ibrahimovic
Sent off: Ibrahimovic 58 (M)