Djokovic, who has yet to win a title this season, rallied from a break down to take the opening set in a tie-breaker and looked powerful on his serve as he won 2️1 straight points on it in the opener.
Alcaraz, however, showed resilience in the second set as he clawed his way back into the match, saving a break point and holding for 6-5 before breaking Djokovic to force a decider.
The crowd got to their feet when the 19-year-old edged out Djokovic in the deciding tiebreak to become the first player to beat two tennis giants, Rafael Nadal and Djokovic, at the same clay court event.
"This gives me a lot of confidence to play the final tomorrow," said Alcaraz after the match which lasted three hours and 35 minutes.
"I know that I played a really good game, and for the rest of the season I think I am able to play against the best players in the world and beat them as well, so it gives me a lot of confidence," he added.