Gerard Pique's late strike proved insufficient for Barcelona as a Jose Mourinho-inspired Inter Milan held out for more than an hour with 10 men to seal their passage to a European Cup final for the first time since 1972, despite a 1-0 defeat at the Nou Camp.
Mourinho's side, protecting a 3-1 lead from the first leg, were reduced to 10 men following Thiago Motta's 28th-minute dismissal, but the Italians defended heroically - and at times cynically - to deny Pep Guardiola's men.
And for Mourinho, who celebrated triumphantly on the pitch at the final whistle, it was vindication following a turbulent spell in Italy and his controversial departure from Chelsea, where he was unable to deliver a repeat of his remarkable Champions League success with Porto.
Inter made a last-minute change with striker Goran Pandev, originally named in the starting XI, replaced by defender Cristian Chivu. Such a move is only allowed if an injury has occurred and Inter could yet be asked to provide evidence to that effect.
As expected, Barca completely dominated the opening stages. The Catalans had around 80% of the possession early on, but Inter were organised and looking comfortable. Mourinho would have been content, but the Portuguese coach was less happy as his side went down to 10 men after 28 minutes.
In his pre-match press conference Mourinho had asked for protection from the referee, while Motta had accused Barcelona of being divers. Although those words were seen as provocative, they also turned out to be somewhat prophetic as Sergio Busquets threw himself to the ground clutching his face after Motta had pushed him in the neck.
Messi then skipped past two defenders on the edge of the box and curled a venomous low shot towards the bottom corner, only to see his effort pushed superbly around the post by Julio Cesar.
Inter were playing the offside trap to great effect at the start of the second half and Barca were reduced to hopeful crosses to Zlatan Ibrahimovic, who was disappointing. The Swede finally departed after 63 minutes, replaced by Bojan Krkic, as Guardiola looked to add some much-needed vitality to his floundering forward line.
Bojan headed agonisingly wide from Messi's cross late on, but Pique ensured a rousing finale as he collected Xavi's pass in the area, left goalkeeper Julio Cesar floored with a neat touch and rolled the ball into the empty net. The noise was deafening in the final five minutes, plus four of added time, as Barca poured forward, willed on by close to 100,000 loyal fans.
Bojan lashed home in added time, but Yaya Toure was harshly ruled to have handled and Inter survived to set up a final meeting with Bayern Munich.