The two sides went into tonight's match level at one apiece after the reverse at the Bernabeu but Madrid's finishing proved far superior on the night as they ended Barca's 22-match unbeaten run.
Early on the home side threatened and Lionel Messi dragged a right-footed shot just wide from a tight angle inside 90 seconds.
Madrid had the opportunity to take a surprise lead in the 13th minute when Cristiano Ronaldo just had Gerard Pique to beat and did a pair of stepovers to put the Spaniard off-balance before sprinting past him and tumbling under his sliding challenge.
The Real number seven picked himself up and sent Jose Manuel Pinto the wrong way to put Los Blancos in front.
Barcelona had a pair of penalty appeals waved away by referee Alberto Undiano before Messi fired a free kick around the wall but just wide of the post before the break.
The hosts continued to hold most of the possession at the start of the second period but Real stunned them with a quickfire counter-attack to go two ahead and effectively kill off the tie.
Xabi Alonso volleyed clear a Barca attack and Angel di Maria collected the ball and jinxed inside and out to put Carles Puyol on his backside before seeing his shot kept out by Pinto.
However, the loose ball popped up for Ronaldo who chested down and rolled it into the net from a few yards.
Because of away goals, that meant Barcelona required four goals in the final 20 minutes.
Madrid will go on to face either Atletico Madrid or Sevilla, who contest their second leg with Atletico leading 2-1 tomorrow, in the final.