Fernando Llorente’s goal, bundled in from a corner and confirmed after VAR delay 17 minutes from time, gave Spurs victory on away goals after the tie ended 4-3 on the night and 4-4 on aggregate.
Victory for Mauricio Pochettino’s men ended City and Pep Guardiola’s quest for a historic quadruple of Premier League, Champions League, FA Cup and League Cup.
City thought they had won it in injury time only for Raheem Sterling’s goal to be ruled out for offside by VAR.
In the other tie, Liverpool breezed past Porto with a thumping 6-1 aggregate victory to reach the Champions League semi-finals.
Leading 2-0 from the first leg at Anfield, goals from Sadio Mane, Mohamed Salah, Roberto Firmino and Virgil van Dijk ensured an emphatic win for Jurgen Klopp’s side.
After weathering an early Porto storm at a rocking Estadio do Dragao, Mane opened the scoring with a sliding effort – from Salah’s scuffed shot – which was confirmed by VAR.
Salah stroked in a second after the break from a superb counter-attack before Real Madrid-bound defender Eder Militao pulled a goal back for the hosts.
But the gulf in quality was apparent and Liverpool made sure of passage with close-range headers from Roberto Firmino and Virgil van Dijk.
Liverpool will face Barcelona in the first leg of their semi-final at the Nou Camp on Tuesday 30 April, while Spurs will take on Ajax on May 1.