Alexander Zverev denied world No 1 Novak Djokovic a record-equalling sixth ATP Finals title and a first for six years with a stunning victory to set up a showdown with Daniil Medvedev.
Djokovic had breezed through to the last four without dropping a set as he chased more glory to end his remarkable year.
But third seed Zverev, who ended his hopes of a Golden Slam by beating him at the Olympics in Tokyo, played a superb match to win 7-6 (7-4) 4-6 6-3.
On Sunday, the 2018 champion will take on last year’s winner Medvedev, who had a straightforward 6-4 6-2 victory against Norwegian debutant Casper Ruud.
Medvedev defeated Zverev in the group stages in a match that went right to the wire and will be the favourite having won their last five meetings.
“I think all the matches were a great level,” said the Russian after his win. “Different opponents and different styles. I managed to win all the matches. It was not an easy match [today].
“When you are in the final you can’t complain, so I am just looking forward to tomorrow and hopefully I can have my best match.”
Zverev knows he has the weapons to beat Djokovic and that confidence shone through as he saved a set point at 5-6 in the opener before playing an exceptional tie-break.
Rarely can Djokovic have lost a set where he has played at such a high level, and he seemed rattled in the early stages of the second but responded in trademark fashion to level the match.
A sloppy game early in the third was uncharacteristic, though, and Zverev held firm on his own serve to clinch a fourth career win over the Serbian.
“Every time we play it takes hours,” Zverev said in his on-court interview. “I have not spent more time on court with anybody other than him this year. I am happy with the win and happy to be in the final here and to give myself the best chance for tomorrow.”
Djokovic was aiming to draw level with Roger Federer and capture his record-equalling sixth ATP Finals title in Turin.