The victory was Madrid’s fifth successive win across all competitions under Jose Mourinho. They remain third, behind Atletico Madrid and Barcelona, but ended the champions’ perfect league start after nine victories.
For Hansi Flick’s Barcelona, the result brought a second consecutive defeat following their Champions League loss to Paris Saint-Germain on Tuesday. They had won six of the previous seven Clasicos since Flick took charge.
An initially cagey contest turned in Madrid’s favour before half-time when Barcelona defender Gerard Martin cleared a cross straight into Mbappe, who deflected the ball into the net for his 10th league goal of the season.
Barcelona had already lost defender Xavi Espart to injury, with Alejandro Balde replacing him before the half-hour mark. Lamine Yamal then missed a clear opportunity to equalise, while Madrid’s Yan Diomande struck the side netting before the interval.
The hosts improved after the break. Just after the hour, Pedri found Raphinha, whose shot travelled through Jude Bellingham’s legs and beat goalkeeper Andriy Lunin. It was the Brazilian’s 13th league goal, keeping him top of the scoring standings.
Lunin, deputising after Thibaut Courtois withdrew with flu, subsequently denied Martin. Yamal curled an effort wide, and Dean Huijsen blocked a shot from substitute Frenkie de Jong.
Madrid struck decisively after Barcelona substitute Gabriel Jesus lost possession. Eduardo Camavinga beat Pau Cubarsi and squared for Mbappe to finish into an empty net, with goalkeeper Joan Garcia drawn out of position.
“In general, we didn’t have a great game. In the first half, we weren’t ourselves; there were a lot of things we could have done better,” Pedri told DAZN.
Madrid secured the win without suspended winger Vinicius Junior, giving Mourinho an important result as he seeks to reverse the club’s fortunes after two trophyless seasons.