Under manager Unai Emery, Villa displayed solid defensive organization, frustrating City’s star-studded attack throughout the match.
Erling Haaland came close on several occasions but failed to convert, while one of his second-half goals was ruled offside.
The defeat ended City’s nine-game unbeaten streak since late August.
With this victory, Aston Villa climbed to seventh place in the league table, while City slipped to fourth — now six points behind leaders Arsenal.
Earlier, Arsenal strengthened their hold on the top spot with a 1–0 win over Crystal Palace, thanks to a 39th-minute strike from Eberechi Eze.
In other matches, Burnley edged Wolves 3–2, and Bournemouth defeated Nottingham Forest 2–0. Bournemouth’s win lifted them to second place with 18 points — four behind Arsenal.
