Match ends, Real Madrid 2, Atlético de Madrid 0.
Defending champions Real Madrid inflicted a first defeat of the season on La Liga leaders Atletico Madrid to move within three points of the summit.
Casemiro's 15th-minute header from Toni Kroos' corner gave the hosts a deserved lead at the Alfredo Di Stefano Stadium.
Dani Carvajal's excellent second-half strike from outside the box rebounded off the post and in off the back of Atletico goalkeeper Jan Oblak.
Real climb to third, while Atletico remain one point above Real Sociedad.
Both sides safely progressed to the Champions League last 16 with 2-0 victories in midweek, as Real beat Borussia Monchengladbach to win Group B and Atletico Madrid overcame RB Salzburg to finish second to Bayern Munich.
In La Liga, Diego Simeone's side had won seven consecutive league games going into the derby, conceding just twice in their first 10 La Liga fixtures.
But it was Real who dominated in the early stages and Oblak produced an excellent save to tip Karim Benzema's shot onto the post before Casemiro's opener.
Simeone responded to a disappointing first half with three changes and his side were much improved after the break, though substitute Thomas Lemar shot agonisingly wide from Marcos Llorente's low cross after 55 minutes.
That miss proved pivotal, as Carvajal's powerful attempt doubled Real's advantage seven minutes later.
Thibaut Courtois produced a good save from Saul Niguez to deny Atletico a late lifeline with their only shot on target, as the visitors fell to a first defeat in 26 league games - since a 1-0 loss in this fixture on 1 February.
Momentum shift in La Liga title race?
Real manager Zidane claimed leaders Atletico should "definitely" be considered title favourites ahead of Saturday's meeting.
Despite their defeat, Simeone's side still have a three-point cushion over Real - as well as a game in hand - but a third straight victory in a key week for Zidane's side may mark a momentum shift.
At the start of December, defeat by Shakhtar Donetsk left Real in danger of exiting the Champions League at the group stage for the first time, and Los Blancos were also seven points off the pace in Spain.
But they beat Sevilla 1-0 last weekend to end a three-game winless run in La Liga, before winning their crucial final Group B match against Monchengladbach on Wednesday.
It appears Zidane's side have re-established some form with Saturday's statement victory over Atletico, who missed the chance to open a six-point gap to Real - with Barcelona already 12 points behind.
For now, the result allows Real Sociedad to claim top spot when they face Eibar on Sunday (13:00 GMT).
"We confirmed the improvement we showed in many areas against Sevilla and Borussia [Monchengladbach]," said Zidane.
"There are criticisms that hurt, but they also make you stronger. We competed very well from minute one until the end, we must be satisfied with work well done."
- 2CarvajalSubstituted forRodrygoat 79'minutes
- 10ModricSubstituted forValverdeat 88'minutes
- 14CasemiroBooked at 36mins
- 20Vinícius JúniorSubstituted forAsensioat 79'minutes
- 15SavicBooked at 61mins
- 18FelipeSubstituted forLemarat 45'minutesBooked at 46mins
- 16HerreraSubstituted forLodi dos Santosat 45'minutes
- 21CarrascoSubstituted forCorreaat 45'minutesBooked at 50mins
- 9SuárezSubstituted forKondogbiaat 73'minutes
- 7SequeiraSubstituted forSaúlat 60'minutes
- 12Lodi dos Santos
- 20Machín Pérez
- 31San Román
- Antonio Miguel Mateu Lahoz
- Shots on Target
Second Half ends, Real Madrid 2, Atlético de Madrid 0.
Toni Kroos (Real Madrid) wins a free kick in the attacking half.
Foul by Marcos Llorente (Atlético de Madrid).
Corner, Real Madrid. Conceded by Jan Oblak.
Attempt saved. Lucas Vázquez (Real Madrid) right footed shot from the right side of the box is saved in the top right corner. Assisted by Karim Benzema.
Offside, Atlético de Madrid. Mario Hermoso tries a through ball, but Ángel Correa is caught offside.
Substitution, Real Madrid. Federico Valverde replaces Luka Modric.
Corner, Atlético de Madrid. Conceded by Raphael Varane.
Foul by Casemiro (Real Madrid).
Saúl Ñíguez (Atlético de Madrid) wins a free kick in the defensive half.
Attempt missed. Thomas Lemar (Atlético de Madrid) left footed shot from the left side of the box is too high.
Corner, Atlético de Madrid. Conceded by Ferland Mendy.
Attempt saved. Saúl Ñíguez (Atlético de Madrid) header from the centre of the box is saved in the centre of the goal. Assisted by Renan Lodi with a cross.
Substitution, Real Madrid. Marco Asensio replaces Vinícius Júnior.
Substitution, Real Madrid. Rodrygo replaces Daniel Carvajal.
Hand ball by Mario Hermoso (Atlético de Madrid).
Ferland Mendy (Real Madrid) wins a free kick in the defensive half.
Foul by Saúl Ñíguez (Atlético de Madrid).
Attempt missed. Saúl Ñíguez (Atlético de Madrid) left footed shot from outside the box is high and wide to the left.
- The Players Podcast: Lionesses legend Kelly Smith on what is takes to reach the top
- Tailenders: England's T20 series reviewed and will Burnley get a Jimmy Anderson street?