The 20-year-old Zverev, the winner last week in Washington, D.C., posted a 10th straight match victory and ended the 36-year-old Federer’s win streak at 16. The German also tied Federer with a fifth tournament victory this year.
He got even for a loss to Federer at Halle, Germany, on June 25 and evened their career head-to-head record at two wins each.
Zverev used some sharp groundstrokes to keep Federer from taking control early and get the only service break he needed to win the first set.
Zverev escaped a break point at 1-0 in the second set with consecutive aces, then broke a mistake-prone Federer for a 4-3 lead and served out the match.
Federer missed a chance to tie Ivan Lendl for second place all time with 94 tournament wins. Jimmy Connors leads with 109.