Шестая ракетка мира Александр Зверев, 24 года, вернулся со счета 4-2 в стартовом сете, чтобы победить пятикратного чемпиона Мадрида 6-4 6-4.
Это была его третья победа подряд над 34-летним игроком.
Зверев встретится с третьим сеяным Тимом в 1/2 финала турнира после того, как австриец победил американца Джона Иснера 3-6 6-3 6-4.
Этот матч станет повторением прошлогоднего финала Ус Опен, который выиграл Тим.
"Это определенно одна из самых больших побед в моей карьере, особенно на грунте против Рафы", - сказал Зверев.
"Это самое сложное, что можно сделать в нашем виде спорта. Победить его в его доме, в Испании, невероятно, но турнир еще не закончился."
Поражение Надаля ставит под вопрос его форму в преддверии Открытого чемпионата Франции, который стартует 30 мая - турнира, который он выиграл 13 раз.
В прошлом месяце он был побежден восьмым номером мирового рейтинга Андреем Рублевым в четвертьфинале в Монте-Карло, и, хотя он выиграл в Барселоне, ему пришлось сохранить чемпионское очко, чтобы победить Стефаноса Циципаса в финале.
Это хорошо началось для Надаля, когда он сломал Зверева, чтобы вести 4-2 в первом сете, когда немец не помог себе с двойной ошибкой.
Но шестая ракетка мира сразу же нанесла ответный удар, а затем отыграла четыре гейма подряд.
Удар справа по линии заставил Зверева сделать еще один брейк в середине второго сета, и в то время как Надаль сопротивлялся большему давлению в седьмом гейме, чтобы удержаться, Зверев одержал впечатляющую победу через час и 44 минуты.