The top two seeds were both defeated in three sets.
Earlier, No. 3 seed Daniil Medvedev had beaten Fabio Fognini in straight sets.
In the day's other quarter-final, Matteo Berrettini pulled off another upset by beating Dominic Thiem.
Here are Friday's results:
(6) Stefanos Tsitsipas bt. (1) Novak Djokovic, 3-6, 7-5, 6-3
(3) Daniil Medvedev bt. (10) Fabio Fognini, 6-3, 7-6 (4)
(5) Alexander Zverev bt. (2) Roger Federer, 6-3, 6-7 (7), 6-3
(11) Matteo Berrettini bt. (4) Dominic Thiem, 7-6 (10), 6-4
The tournament's schedule can be found at the ATP Tour's official website.
An electric start from Djokovic saw him race to a 3-0 lead in just seven minutes as he played with power and intensity:
After he limited Tsitsipas to just one opportunity to break back, which he saved for a 5-2 lead, Djokovic saw out the first set to continue a superb run, per Record's Jose Morgado:
That run came to an end in the second set, though. After failing to convert two break points following a hard-fought start, Tsitsipas eventually made a breakthrough in the final game when Djokovic followed up a double-fault with a loose forehand.
The Guardian's Tumaini Carayol observed the Greek's improvement when he took command of the deciding set:
While Tsitsipas improved, Djokovic struggled to reach the same level he began the match at, with his break point early in the first set proving to be the only one he earned in the contest.
The 21-year-old either needed a Medvedev win or to beat Djokovic to secure a place in the ATP finals, so he'll be in London for the eight-man event in November, which he was delighted to hear:
As for Djokovic, he was magnanimous in defeat but critical of his own performance, per tennis writer Carole Bouchard:
The defeat will also have an impact on his ranking, per Morgado:
Tsitsipas will face Medvedev in the semi-finals on Saturday.
The Russian will be featuring in his 12th semi-final of the year, having notched his 44th win on hard court in 2019 with his victory over Fabio Fognini.
Federer and Zverev entered their match level at three wins apiece in their head-to-head record, so it was perhaps unsurprising that their contest was so hard-fought.
The German came out on top with a single break in the first set, and he broke back immediately after Federer took a 2-0 lead in the second.
Zverev looked to be on the verge of winning when he broke the Swiss maestro again with a superb down-the-line winner:
This time it was Federer's turn to hit back, though:
He saved three match points from 0-40 on his way to forcing a tiebreaker, which he eventually won after fending off two more match points.
The 20-time Grand Slam winner quickly found himself 3-0 down in the decider and in conflict with the umpire:
There would be no dramatic comeback from Federer at that stage, with Zverev seeing out the victory to secure his place in the final four.
U.S. Open semi-finalists Berrettini continued his breakout year against the fourth seed Thiem, winning in straight sets. The Italian is moving ever closer to the ATP top 10, and a spot in the Finals is well within reach if he can beat Zverev.