Manchester City's wait to be crowned Premier League champions continues after Marcos Alonso fired Chelsea to a late victory at the Etihad.
City took the lead late in the first half as Sterling latched onto a loose touch by Sergio Aguero to put the hosts ahead in the 44th minute.
Moments later, they had a glorious chance to double their lead with a penalty after Billy Gilmour's clumsy challenge on Gabriel Jesus.
Sergio Aguero stepped up in search of a record-equalling goal for City and opted for the most audacious of penalties - the Panenka.
But Edouard Mendy stood firm and casually gathered the dinked effort to leave Pep Guardiola furious on the touchline.
Chelsea scored a deserved equaliser just after the hour mark as Ziyech rifled in from outside the area after a well-worked team move.
The visitors had the ball in the back of the net a further two times in the second half but Timo Werner and Callum Hudson-Odoi were found to be offside in the build-up.
The Blues continued to be the more threatening side throughout the closing stages and Alonso snatched all three points with deflected strike deep into added time.
Here are five talking points from an entertaining evening at the Etihad.
1. Pep's experiment
City and Chelsea will compete for the most prestigious honour in European football later this month. Upping the stakes of Saturday's clash further, the Sky Blues knew victory would be enough for them to lift the Premier League title.
As such, many expected we would see two first-choice starting XIs at the Etihad - but Pep Guardiola had other ideas.
The Spaniard made a total of nine changes from the line-up which was so impressive against Paris Saint-Germain, and deployed his side in an unconventional back three formation.
There was a touch of Marcelo Bielsa's iconic 3-3-1-3 about City's set-up, with Raheem Serling, Sergio Aguero and Gabriel Jesus deployed up front with Ferran Torres just behind.
Rodri was the lynchpin in midfield with Benjamin Mendy and Joao Cancelo on either flank ahead of Ruben Dias, Aymeric Laporte and Nathan Ake.
Guardiola's opposite number, Thomas Tuchel, also rung the changes and made five alterations to the XI which beat Real Madrid in midweek.
Kai Havertz - who has been in blistering form of late - was one of the stars to drop to the bench while teenager Billy Gilmour was handed a rare start in midfield.
The taxing fixture schedule during the run-in was clearly on Guardiola and Tuchel's minds, and it seems likely both managers will name vastly different line-ups for the final in Istanbul.
2. Sterling's scare
Just 12 minutes into the match, Manchester City were perhaps fortunate not to go down to 10 men.
Raheem Sterling lunged in studs-up on Timo Werner in City's defensive third, connecting with the German's lower leg.
The initial decision by Anthony Taylor was a yellow card and a relatively short VAR check sided with the referee's decision.
Similar incidents this season have resulted in red cards being shown and Chelsea fans may well be aggrieved that Sterling was not given his marching orders for challenge which was arguably reckless.
As for the City winger himself, he went into the match without a goal since February and the tackle hinted at his frustrations.
But he was back among the goals before the end of the half and his 10th Premier League goal of the season puts his bid for prominent England role at this summer's Euros is back on track.
3. Aguero's agony
One goal was all Sergio Aguero needed to match the record number of Premier League goals for one club - held by Wayne Rooney with 183 for Manchester United.
And the 32-year-old - who will leave the Etihad this summer after 10 years of service - decided he wanted to equal the record in style.
He stepped up after Gabriel Jesus was felled by Billy Gilmour and clipped a Panenka straight down the middle of the goal.
To Aguero's astonishment - and everybody else's - Edouard Mendy decided to stay rooted to the spot after initially looking like he would dive to his right.
This allowed the Senegal international to make a comfortable save and ensure Chelsea went into the interval with just a one-goal deficit.
It was moment to forget for Aguero, who now has just three Premier League games remaining to try and match Rooney's record.
4. Chelsea capitalise
City were punished for their penalty miss and pedestrian second-half performance as Hakim Ziyech fired in at the near post from just outside the area in the 63rd minute.
The goal had been coming as the visitors started the much brighter side after the interval and, impressively, were able to go toe to toe with the title-winners-elect.
Not only that, Marcos Alonso's late strike hints at the character and spirit Thomas Tuchel has instilled during his short tenure in the Blues hot seat.
This was City's second string on show, admittedly, but Chelsea made a number of changes too and the momentum is certainly with them ahead of the Champions League final later this month.
The 2-1 victory at the Etihad adds to the Blues' 1-0 victory over City in April's FA Cup semi-final, and Tuchel may well think he has Pep Guardiola's number.
The tactical battle between these two world-class managers is another compelling aspect to the all-English showdown.
5. Top-four permutations
Understandably, Chelsea's focus at present is largely on their two fast-approaching cup finals.
The Blues face Leicester City at Wembley next Saturday before travelling to Istanbul for the Champions League final against Manchester City eight days later.
Winning two major honours just four months after his appointment would be an enormous achievement for Thomas Tuchel, while the icing on the cake would also be a top-four finish.
And Chelsea took a huge leap towards securing Champions League football with their victory at the Etihad.
A vital three points lifts them into third, six points clear of fifth-place West Ham, who have a game in hand, and 10 points clear of Liverpool.