Athletic Bilbao forward Raul Garcia scored twice in a 2-1 win over Real Madrid on Thursday to knock the holders out of the Spanish Super Cup and set up a final against Barcelona.
Garcia, who was sent off during a 3-1 defeat by Real last month, made the most of two glaring errors from Real's Lucas Vazquez to net twice in the first half before Karim Benzema pulled one back for Real 17 minutes from time.
Athletic meet Barca on Sunday in Seville in a repeat of the 2015 final, which the Basques won 5-1 on aggregate.
The Catalans overcame Real Sociedad 3-2 in a penalty shootout following a 1-1 draw in Wednesday's first semi and beat Athletic 3-2 last week in La Liga.
"They made an excellent start while we struggled at first, we got back into the game and had our chances," said Real's Marco Asensio.
"They grew a lot after the first goal and had more belief in their play. We're sad because we wanted to reach the final but that's football and we have to move on quickly as we have more objectives to fight for."
The 34-year-old Garcia got Athletic off to an ideal start when he pounced on indecision in the Real defence to latch on to a through ball and slot into the net in the 18th minute after right back Vazquez had given the ball away.
Garcia doubled the lead by sending Real keeper Thibaut Courtois the wrong way from the penalty spot in the 38th minute, after Vazquez had hauled down Inigo Martinez.
Iker Muniain should have added a third early in the second half but missed the target with a free header and Real's Asensio hit the woodwork twice before Benzema pulled Real back into contention.
The Frenchman's strike had initially been ruled offside but was awarded after a VAR review.
Benzema put the ball in the net again and was again given offside but this time the VAR ruled against him.
Real probed for an equaliser deep into six minutes of added time and Athletic faced an agonising wait for a VAR check to be completed on a potential Real penalty but they were spared and wildly celebrated the win.
"We knew we could trust in this group of players, we were up against a great opponent but we always believed," Garcia said.
Arsenal lack spark as Palace stalemate slows revival
Arsenal's impressive recent resurgence in the Premier League was checked by Crystal Palace as their attack failed to spark in a dismal 0-0 draw at the Emirates on Thursday.
Mikel Arteta's side were bidding for a fourth successive league win but could find no way through an obdurate Palace who, if anything, might feel they could have emerged with a win.
Palace were well worth their point and were the better side in the first half in which defender James Tomkins headed against the crossbar and Christian Benteke went close.
Arsenal controlled the second half but rarely troubled Palace goalkeeper Vicente Guaita.
They remained in 11th spot in the standings with 24 points from 18 games with Palace two places lower with 23 points.
With the locked down capital reeling under the COVID-19 surge, this was perhaps a good night for fans to have no other option but to watch the game on television.
Incessant drizzle all day created the perfect, zippy playing surface, but rather than inspire a feast of attacking play it was a cagey affair as Palace stretched their unbeaten league run against Arsenal to five.
The main positives for Arsenal were a first home clean sheet in the league this season and the return of Thomas Partey as a second-half substitute having recovered from injury.
Palace manager Roy Hodgson was happy with a point.
"I am more than satisfied. We created opportunities and in the second half we wasted positions on the break. We defended excellently and I am very proud of them," he said.
Pierre-Emerick Aubameyang did threaten early on for Arsenal with a dipping effort that was fumbled by Guaita but Palace provided more attacking threat with Eberechi Eze impressive.
Eze released Benteke in on goal but his shot was tame and it was Eze's free kick which Tomkins headed against the crossbar.
Benteke also forced a flying save from Bernd Leno after connecting with a superb Tyrick Mitchell cross.
With Arsenal's in-form left back Kieran Tierney injured, the hosts were far too predictable and Aubameyang and Alexandre Lacazette were left to feed on crumbs.
Lacazette did fire one chance into the side-netting but all in all it was a laboured display by Arteta's side.
"We probably didn't do enough to win the game," Arteta said. "We are playing a lot of games and you can see fatigue is paying a price, many players aren't fresh."
PICS: Australia vs India, 4th Test, Day 1
Saini leaves field after injury on Day 1 of 4th Test
From net bowlers to Test debut!
'Conflict of interest' complaint against Rajeev Shukla
'Don't need housekeeping, room service for motivation'