The 28th-ranked Karatsev saved 23 of 28 break points to advance to his second final of the year following a 7-5, 4-6, 6-4 victory, gaining a measure of revenge for his defeat by Djokovic in the last four of the Australian Open.
Djokovic was also beaten in the last 16 of the Monte Carlo Masters last week by Britain’s Dan Evans.
“You have to put (in) like 200 per cent to beat this guy, it’s like playing against a wall,” said Karatsev. “This is definitely (the biggest win of my career), it’s the World No. 1,” he added.
“I’m really happy, I put everything on the court. The match was long. I’m really happy with my performance today.”
Here’s a question that no one is asking these days ⬇️@AsKaratsev | #SerbiaOpen2021 https://t.co/x4iKzsw6hZ
— ATP Tour (@atptour) 1619291308000
Djokovic, the 2009 and 2011 champion at the event which is played at a venue which carries his name, surrendered a 3-0 advantage in the opening set as he dropped serve three times.
The Serb then fell 4-2 behind in the second but summoned his well-documented powers of recovery to win four straight games and send the match to a deciding set.
Dubai champion Karatsev fended off eight break points in the third set before winning Djokovic’s service game to move 4-3 ahead and leave the top seed on the brink.
Djokovic saved a match point down 5-3 to force Karatsev to serve it out. The third seed saved two further break points as he completed a landmark win after three hours and 25 minutes.
Karatsev will face 10th-ranked Matteo Berrettini or Japan’s world number 126 Taro Daniel in Sunday’s final.
Daniel is the first lucky loser to reach an ATP semi-final this year.