A 6-2 7-5 loss to Schwartzman in Rome ended Nadal's 100 per cent record in their rivalry, after nine previous wins for the Spaniard.
In their fifth clash on clay, and first on the surface since Nadal won in four sets in the 2018 Roland Garros quarter-finals, Schwartzman wobbled with victory in sight.
At 5-4 ahead in the second set he was broken to love by 12-time French Open winner Nadal.
But the No.8 seed magnificently broke back immediately and then held his nerve to complete a memorable success, finishing with a volley at the net out of the reach of the stranded Nadal.
The result ends the prospect of a final between Nadal and No.1 seed Djokovic on Tuesday (AEST), with Schwartzman moving on to tackle Canadian Denis Shapovalov in the last four of the tournament.
"Today I played my best tennis. [It was] Very similar to Roland Garros against Rafa three years ago and I'm very happy," Schwartzman said after the win.
"I was not thinking to beat him really because I was not playing good lately. But today I did my best and I'm very happy."
There were clear mitigating circumstances behind Nadal's unusually early exit, given this is his first tournament since February.
The 34-year-old elected to miss the resumption of tennis in the United States last month, skipping the US Open over concerns about long-haul international travel in the coronavirus period.
Shapovalov was a 6-2 3-6 6-2 winner against Bulgarian Grigor Dimitrov earlier in the day.