Luis Suarez endured a dreadful Barca bow when the Catalan giants lost 3-1 at the Santiago Bernabeu in October, but gained revenge by netting his first goal in the biggest fixture in club football to secure a precious win.
Jeremy Mathieu's first La Liga goal for Barca put them in front in the first half, but Cristiano Ronaldo rounded off a delightful free-flowing move to equalise before the break with his 42nd goal of the season.
Suarez's seventh goal in as many games settled it to put Barca in command of the title race heading into the international break.
Defeat for Real will cast further uncertainty over Carlo Ancelotti's future, with reports in the Spanish press suggesting the Italian's job would be under threat as a result of a Clasico defeat.
In the fight for UEFA Champions League places, Sevilla kept the pressure on Atletico Madrid with a 2-0 win at Villarreal, Marcelino Garcia Toral's third defeat to his former employers in 11 days.
After claiming a 5-2 aggregate win over Villarreal in the UEFA Europa League on Thursday, Sevilla coach Unai Emery declared that he had figured out exactly how to play their fellow high-flyers and that was evident yet again on Sunday.
The home side dictated much of the match and struck the woodwork through Moi Gomez, but a focused Sevilla display spawned second-half goals from Coke and Vitolo, who on Friday received his first Spain call-up, secured a smash-and-grab victory.
The result leaves Sevilla on 55 points, their highest ever tally after 28 matches and six clear of Villarreal, who remain sixth.
David Moyes' Real Sociedad claimed their fourth win in five in a 3-1 triumph over rock-bottom Cordoba, who saw Aleksandar Pantic, Inigo Lopez and Daniel Pinillos all sent off, while the day's early kick-off saw Espanyol leave Deportivo La Coruna with a goalless draw.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.