City were forced to settle for a point as United produced a resolute defensive performance to claim a 0-0 draw.
The Reds spent the last 15 minutes with just ten men following Marouane Fellaini’s dismissal and the Blues had the ball in the net in injury time, only to be denied by the assistant referee’s flag.
The opening period was a war of attrition with a well-organised United side spending much of the half repelling City’s prods and probes.
It wasn’t the eye candy the watching millions around the globe were hoping for, but both teams did have their chances.
City came closest to breaking the deadlock in the ninth minute when Kevin De Bruyne’s cross found Sergio Aguero in the six-yard box but the Argentine guided the ball onto the outside of the post.
There were a few hearts in mouths when Claudio Bravo clawed Anthony Martial’s cross out of the air but only palmed it into the path of Henrikh Mkhitaryan who saw his shot saved by the Chilean.
Much of the battle was fought in midfield where Yaya Toure and Fernandinho frequently clashed with Marouane Fellaini and Ander Herrera.
Both defences looked solid, too, with Vincent Kompany and Nicolas Otamendi handling the pace of Marcus Rashford and Martial well.
United’s high press offered little space for creativity, but as the half wore on, so the gaps began to appear.
Aleksandar Kolarov saw a low drive well saved by David de Gea and Aguero blazed a couple of half-chances over the bar from distance.
United’s best chance came in the final seconds of the half as Rashford’s free-kick found Herrera at the back post but the Spaniard headed wide of the target.
There was little change after the re-start with City keeping the Reds pressed back in their own half and but for a smart de Gea save just before the hour-mark, Kevin De Bruyne might have given the Blues the advantage.
As the half wore on, it looked more and more likely neither team would find the net with both defences on top, though the Reds’ had been worked much harder on the night - 19 shots for City and three for the Reds tells its own story.
But there was to be drama of sorts in the final ten minutes, first as Bravo went down with what looked like a calf injury and was replaced by Willy Caballero – then United were reduced to ten men as Fellaini received ta straight red card for what looked like an attempted headbutt on Aguero.
Gabriel Jesus was summoned from the bench for an explosive last few minutes and the Brazilian sent the Etihad Stadium wild by heading home Aguero’s cross in injury time, but he’d strayed a foot offside and the goal was ruled out.
A winner would have been just reward for City’s efforts, but Pep Guardiola couldn’t have asked much more of his men.
City Matchday App Star Man: Aguero
What it means…
City stay fourth, a point behind Liverpool with a game in hand and two points ahead of United in fifth.
Liverpool and Arsenal benefit the most from the draw with the Gunners having a game in hand on both Manchester clubs and two on Liverpool.
The Blues travel to relegation-threatened Middlesbrough on Sunday looking to repeat the FA Cup quarter-final victory at The Riverside last month.
Top four rivals Arsenal have a North London derby at Spurs to contend with while Liverpool travel to Watford while United host Swansea.
Manchester City (0): Bravo (Caballero 77), Zabaleta, Kompany, Otamendi, Kolarov, Fernandinho, Touré, Sterling (Gabriel Jesus 85), De Bruyne, Sané (Navas 78), Agüero
Manchester United (0): De Gea, Valencia, Bailly, Blind, Darmian, Fellaini, Herrera, Carrick, Rashford (Young 90), Mkhitarayan (Fosu-Mensah 85), Martial (Lingard 78)
Referee: Martin Atkinson. Fellaini (sent off)); Booking: Gabriel Jesús