Koke put the hosts in front after just five minutes as he volleyed home Adrian Lopez’s headed pass.
Atletico also hit the woodwork three times in the first-half, but were made to hold on in the final stages as Neymar came within inches of taking the game to extra time when his header went just wide.
Defeat ends Barcelona’s run of reaching six straight Champions League semi-finals.
Despite missing top-scorer Diego Costa through injury, Atletico made an incredibly fast-paced start and were ahead within five minutes.
Adrian, who was only starting due to Costa’s absence, smashed a shot off the post and when David Villa collected the loose ball his cross was headed by Adrian into the path of Koke to volley home.
Villa should then have doubled Atletico’s advantage as he burst onto Koke’s through ball and struck the post with just Jose Manuel Pinto to beat.
Lionel Messi then had Barca’s first clear opening when he headed Dani Alves’ cross inches wide.
However, Atletico were soon back on the front foot and Villa was again denied by the woodwork against his old side on 19 minutes when he volleyed Raul Garcia’s flick-on against the bar.
Barca managed to stem the Atletico tide somewhat as the first-half developed and Messi fired another decent opening wide after sensational skill by Neymar took him past three Atletico players.
Both sides had penalty shouts waved away just before half-time as Koke went down under pressure from Javier Mascherano before Cesc Fabregas claimed he had been caught by Diego Godin, but on both occasions English referee Howard Webb was unimpressed.
The roles were reversed at the start of the second-half as Barca pressed in search of the precious away goal that would bring them back into the tie.
Neymar was played in by a fine through ball by Xavi, but Thibaut Courtois did enough to force the Brazilian wide before Xavi somehow was unable to bundle home Dani Alves’ cross from the rebound.
Xavi came close again on the hour mark as this time he headed an Alves cross just past the far post.
Both coaches then made their first changes as Alexis Sanchez replaced Fabregas and Diego Ribas was introduced for Adrian.
And it was the Atletico man, whose wonder strike put Los Rojiblancos in front in the first leg, who nearly made an immediate impact as his drive from a narrow angle was beaten away by Pinto.
The Barca reserve ‘keeper then made a vital save with his outstretched leg to prevent Gabi sealing the tie as he bore down on goal.
Andres Iniesta was surprisingly replaced by Pedro Rodriguez, but even without their creative fulcrum Barca nearly found a way through when Neymar’s diving header flew inches past 12 minutes from time.
Pinto made another fine save to prevent Cristian Rodriguez rounding off a famous night for Atletico in style in the final minute.
However, it made no difference to the final result as the final whistle was greeted with a huge roar by the home fans.