Argentina's del Potro snapped Djokovic's winning streak of 22 matches stretching back to last year with 4-6, 6-4, 6-4 victory in the second semifinal at the BNP Paribas Open.
Del Potro broke the Serbian superstar three times in the decisive second set under the desert heat, then won six of the last seven games to finish out the victory.
He will face the fifth-seeded Nadal in the finals, after the Spaniard advanced with a 6-4, 7-5 victory over No. 6 Tomas Berdych of the Czech Republic in the day's first semifinal.
Nadal will be seeking his third Indian Wells title but first since 2009 in Sunday's championship tilt after playing well in his first hard court performance since returning from a knee injury.
Nadal's last non-clay court victory came in October 2010 in Tokyo.
Couple mistakenly served bag of cash at McDonald's drive-thru
Jordana Brewster on Paul Walker: 'He was an enormous presence in my life'