The Australian will now face 23-year-old Daniil Medvedev in Sunday’s final. The Russian also pulled off an upset by beating fourth seed Kei Nishikori 6-4 3-6 7-5.
Going into the match, Thiem had failed to beat Nadal in their last two meetings, both at a grand slam, but had defeated him in their last meeting on Spanish soil.
The world number five broke Nadal to take a 3-2 lead in the opener and then saw out the set.
He broke Nadal again in the fifth game to lead 3-2 and edged towards victory by taking a 30-15 lead before Nadal pulled himself back into contention by winning the next three points.
Nadal dug deep to avoid defeat as Thiem served for the match, but Thiem sealed his fourth career victory over Nadal in 12 matches with a softly-struck backhand which the Spaniard had no chance of reaching, ending Nadal’s chances of a fourth consecutive Barcelona Open title.