The result lifts Atlético above their city rivals in the table, with Diego Simeone’s side now second on 16 points. Real remain on 15 and are already six points behind leaders Barcelona, who still have a perfect record.
Both sides field strong attacking line-ups
Simeone set his team up in a 3-4-2-1, with Cristian Romero, Marc Pubill and Dávid Hancko forming the back three. Giuliano Simeone and Grimaldo operated as wing-backs, while Álex Baena and Kang-in Lee supported Jonathan David. Julián Álvarez, Ademola Lookman and Koke all started on the bench, with Pablo Barrios and Alexander Sørloth unavailable through injury.
José Mourinho also named a side packed with attacking quality. Jude Bellingham played behind Kylian Mbappé, with Vinícius Júnior and Arda Güler completing the front four. Federico Valverde and Aurélien Tchouaméni provided the balance in midfield. Éder Militão, Ferland Mendy and Rodrygo were among those missing through injury.
Fouls and stoppages dominate the first half
From the opening minutes, the derby was defined more by intensity than fluent football. Both sides were aggressive in the duels, stopped counter-attacks early and rarely allowed the opposition to build long passing sequences.
Atlético alone committed ten fouls in the first half, their highest total before half-time in a league derby against Real since 2018. The constant interruptions made it difficult for either side to establish any rhythm. Real showed flashes of pace in isolated dribbles, but Mbappé and Vinícius rarely received the ball in truly dangerous areas. Atlético protected the middle well and repeatedly forced their rivals towards the flanks.
One of the major flashpoints involved Cristian Romero and Bellingham. After a heavy challenge from the Atlético defender, VAR intervened. A yellow card initially shown to Bellingham was overturned, while Romero was booked. Real felt the challenge was worthy of a red card. Shortly before half-time, Kang-in Lee also escaped without a booking after a strong tackle on Valverde.
In footballing terms, the opening 45 minutes produced little. Atlético failed to register a single shot on target, while the combined chance quality remained extremely low at 0.19 to 0.13 xG.
VAR sends Huijsen off as Grimaldo converts
Simeone made a change at the interval, introducing Koke for the already-booked Pubill. The experienced midfielder immediately brought greater composure in possession, while Llorente was able to drift more freely towards the right.
The decisive moment followed soon after. Hancko played a ball in behind Real’s defence for Giuliano Simeone, who drove towards goal and was held back by Huijsen inside the penalty area. Referee Miguel Ángel Ortiz Arias pointed to the spot and initially showed the centre-back a yellow card.
After reviewing the incident on the monitor, however, the referee upgraded the punishment and sent Huijsen off for denying a clear goalscoring opportunity. Grimaldo stepped up and converted the penalty in the 53rd minute to put Atlético ahead.
Mourinho reacted immediately. Rüdiger replaced Güler to restore a back four, while Yan Diomande came on for Vinícius as early as the 54th minute. The Brazilian had struggled to make an impact and won only three of his seven duels.
Giuliano creates the second for Jonathan David
Real had barely reorganised after the red card when Atlético struck again. Giuliano found space on the right, drove forward and delivered into the middle, where Jonathan David finished for 2-0 in the 59th minute.
Giuliano was the key figure in Atlético’s second-half surge. He won the penalty that led to Huijsen’s dismissal and then created the second goal. His pace and direct running on the right repeatedly caused problems for Marc Cucurella.
David also continued his strong run of form. The Canadian has now scored in three consecutive LaLiga appearances. He was replaced shortly afterwards by Julián Álvarez.
Atlético were now in complete control. Over the full match, the hosts had 61 per cent possession, outshot Real 18-8 and recorded 38 touches in the opposition box to Real’s 14. Thibaut Courtois prevented the scoreline from becoming more emphatic with several excellent saves. He denied Romero in particular, while Konaté later cleared an Álvarez effort off the line.
Real’s attack struggles to make an impact
Mourinho’s side found few solutions in numerical inferiority. Mbappé was almost completely isolated, managing just one shot and failing to hit the target. Bellingham produced a few promising passes but was unable to generate sustained momentum in the final third.
The xG figures of 2.38 to 0.32 in Atlético’s favour underline just how little attacking threat Real produced. It was the club’s lowest xG total in a LaLiga match since February 2015 — once again against Atlético.
That Real remained in the contest until the final whistle was largely down to Courtois. The Belgian made five saves and prevented considerably more than one additional goal according to the quality of the shots he faced. Despite the defeat, he was one of the standout performers on the pitch.
Rüdiger gives Real late hope
Mourinho introduced Bernardo Silva for Bellingham in the 82nd minute, and that change helped create one final opening. In the 89th minute, Bernardo delivered a free-kick into the box and Rüdiger rose highest to head home for 2-1.
Real threw players forward during six minutes of stoppage time but never created another clear chance. Atlético, meanwhile, had opportunities to score a third on the counter but failed to make the most of them.
Atlético move above Real as pressure grows on Mourinho
For Atlético, the derby victory is significant not only because of the result but also because of the way they managed the game. Simeone’s side had already kept the contest balanced at 11 against 11 and then took full advantage of Huijsen’s dismissal. With 16 points, Atlético climb to second place, five behind Barcelona.
Real drop below their city rivals on 15 points. Beyond the red card, Mourinho will be concerned by how little his high-profile attacking unit created. Mbappé and Vinícius in particular were unable to consistently trouble Atlético’s defensive structure.
After the international break, Atlético travel to Alavés on October 10 before hosting Manchester United in the Champions League three days later. Real face Villarreal at home on October 10, followed by a Champions League trip to AS Roma on October 14.