La première mi-temps s'est déroulée de manière tendue avec de nombreux duels acharnés, mais sans but. Les deux équipes se sont principalement battues au milieu de terrain, de sorte que le nombre d'occasions réellement dangereuses n'est pas élevé.
L'Atletico Madrid a pris l'initiative de faire pression, tandis que le Real Madrid a cherché à exploiter la vitesse de Kylian Mbappe et Vinicius Junior. Le point culminant des 45 premières minutes a été la situation où Cristian Romero a reçu un carton jaune après l'intervention de la VAR à la 38e minute.
Dès le début de la 2e mi-temps, Giuliano Simeone s'est échappé derrière la défense du Real Madrid et a été tiré par Dean Huijsen dans la surface de réparation. Le défenseur central du Real Madrid n'a initialement reçu qu'un carton jaune, mais la VAR a demandé à l'arbitre de revoir la situation.
Après vérification, l'arbitre principal a changé de décision, a sorti un carton rouge direct pour Huijsen et a accordé un penalty à l'Atletico. Alejandro Grimaldo s'est avancé sur le point de penalty et a battu Thibaut Courtois, donnant l'avantage à l'Atletico 1-0.
Seulement 6 minutes après le but d'ouverture, l'Atletico a continué à profiter de son avantage numérique. Giuliano Simeone a effectué un centre en retrait dans la surface de réparation pour que Jonathan David se précipite et tire en une touche, portant le score à 2-0.
Cependant, le Real Madrid n'a pas abandonné. Après des ajustements de personnel, l'équipe visiteuse s'est précipitée pour chercher un but afin de réduire l'écart. Leurs efforts ont été récompensés à la 89e minute lorsque Rudiger a sauté haut pour placer une tête sur une passe décisive de Bernardo Silva.
Cependant, le temps restant n'a pas suffi au Real Madrid pour trouver un but égalisateur. L'Atletico a conservé sa victoire 2-1 et a remporté les 3 points lors du derby.
Cette victoire permet à l'Atletico Madrid de prendre une avance de 16 points, tandis que le Real Madrid conserve 15 points.