Morata came off the bench to cancel out Federico Chiesa’s opening goal and force extra-time, but then missed his spot-kick deep into the shootout, allowing Chelsea midfielder Jorginho to send Roberto Mancini’s side back to Wembley for Sunday’s final.
Italy had come into the final as favourites, having impressed ever since thumping Turkey on the opening night of the tournament, while Spain had only finished second in their group and needed more than 90 minutes to overcome both Switzerland and Croatia in the knockout stages.
However, with Alvaro Morata dropped in favour of Mikel Oyarzabal, a more fluid front-three featuring Ferran Torres and the excellent Dani Olmo caused Italy plenty of problems, with teenager Pedri again impressive in midfield.
Italy retained a threat, with Emerson Palmieri – in for the injured Leandro Spinazzola – clipping the bar shortly before half-time, but it was still against the run of play when Chiesa’s stunning curling effort capped a fine break to open the scoring on the hour-mark.
Morata was sent on and came up with a vital equaliser ten minutes from time after a smart one-two with Olmo, to force an extra period during which Italy substitute Domenico Berardi had a goal ruled out for offside.
Both sides missed their opening penalties of the shootout, with Manuel Locatelli denied by Unai Simon before Olmo blasted over.
It was Morata’s miss with Spain’s fourth spot-kick that proved the crucial moment though, the forward’s tame effort kept out by Gianluigi Donnarumma, allowing penalty specialist Jorginho to slot home the winner and set up a meeting with either Denmark or England.