Luis Suarez scored twice in the second half either side of a Raphael Varane own goal to send the Catalans through and keep their treble hopes alive.
Real are now nine points behind their fierce rivals in La Liga but do have a chance to close the gap on Saturday when the pair meet in the league.
It will be a tough pill to take for Santiago Solari, but there were plenty of positive moments in the attacking parts of the game.
The last time they lost a Copa tie was the 2014 final, when they were beaten 2-1 by Madrid.
"But we did not take our chances, and they did".
Clasico's often give fans a chance to see some of Spain's top players share the same pitch and on top of that they also give the players a chance to scout their biggest rivals up close.More news: North Korea's Kim reported en route to Vietnam summit with Trump
More news: Karl Lagerfeld, Chanel fashion designer, dead at 85
More news: Pres. Trump to say Venezuela's move to democracy is 'irreversible'
This year's other finalist will be decided on Thursday, when Valencia hosts Real Betis after a 2-2 draw in the first leg in Seville. "A week ago we talked about [Karim] Benzema being the best nine, Vinicius, Lucas [Vazquez]...we can not talk about Cristiano because he's not a Madrid player". It would leave the Champions League as the only competition in which it can still succeed in its first season without Cristiano Ronaldo in almost a decade.
"We had chances in the first half but also in the second too when the score was 1-0".
It's clear that Vinicius is heavily involved in his side's play.
Barcelona took advantage of Madrid's misses and quickly struck after halftime, with Suarez firing a low shot past goalkeeper Keylor Navas after a cross by Ousmane Dembele, who made a run behind the Madrid defenders following a through ball by Jordi Alba on the left flank.
In stark contrast, Karim Benzema was much slicker in his build-up play and contributed far more to the overall flow of the game, but squandered his only real chance with a weak shot.
Barcelona reached a sixth successive Copa del Rey final by beating Real Madrid on Wednesday, a feat which Gerard Pique says will never be repeated in Spanish football.
But his selection in Madrid's starting line-up remains in doubt.