Manchester United also let slip points in the Premier League when the leaders conceded a stoppage time goal at Tottenham Hotspur to draw 1-1. However, there were wins for Serie A table-toppers Juventus and Bayern Munich in the Bundesliga.
Second-placed Atletico Madrid and their city neighbours Real both took full advantage of Saturday's first defeat of the campaign for leaders Barcelona with victories against Levante and Valencia respectively on Sunday.
Atletico closed to within eight points of Barca when Adrian and Koke struck in a 2-0 home win, while Real turned in one of their best performances of the season and Cristiano Ronaldo and Angel Di Maria each scored twice as the champions crushed Valencia 5-0 away.
Barca let slip a two-goal lead and were beaten 3-2 at Real Sociedad, although Lionel Messi scored for a 10th consecutive league game to match the La Liga record last achieved by former Barca striker Ronaldo in 1996-97.
Atletico maintained their perfect home record with a 10th victory in 10 league matches this term and have now gone a club record 10 games in all competitions without conceding a goal at their Calderon stadium.
Diego Simeone's side are second on 47 points from 20 of 38 games. Barca have 55 points, while Real, whose erratic form has effectively ended their hopes of a second straight title, remain seven adrift of Atletico on 40 in third.
A last-gasp equaliser from Tottenham Hotspur's Clint Dempsey meant Manchester United's lead at the top of the Premier League was cut to five points as the two sides drew 1-1 in snowy weather.
Robin van Persie's 18th league goal of the season midway through the first half looked like being enough for United but keeper David de Gea's weak punch in stoppage time went to Tottenham winger Aaron Lennon and his quick pass inside allowed Dempsey to sweep the ball into the net from close-range.
David Silva scored both goals in Manchester City's 2-0 win over Fulham as the champions kept the pressure on in second. City have 51 points to United's 56.
Chelsea are third on 45 points and their distant pursuit of the two Manchester clubs was boosted when goals from Juan Mata and Frank Lampard gave them a 2-1 victory over Arsenal at Stamford Bridge for interim manager Rafael Benitez's second win in six home league games since he replaced Roberto Di Matteo.
Liverpool's Jordan Henderson, long seen as a major flop, scored a rare goal in his seventh-placed side's 5-0 thrashing of Norwich. Luis Suarez, Daniel Sturridge with his third goal in as many games since joining from Chelsea, Steven Gerrard and a Ryan Bennett own goal completed the rout.
Two long-range goals from midfielder Paul Pogba sent leaders and defending champions Juventus on their way to a 4-0 drubbing of Udinese.
Mirko Vucinic and Alessandro Matri scored the other two to give Juventus a five-point lead over Napoli and Lazio who both drew.
Edinson Cavani's 17th goal of the season and 100th of his Serie A career gave Napoli a 1-1 draw at Fiorentina where Facundo Roncaglia opened the scoring with a shot from inside his own half, aided by a blunder from goalkeeper Morgan De Sanctis.
Lazio drew 2-2 at lowly Palermo, needing an 84th-minute penalty converted by Hernanes to give them a point.
Zlatan Ibrahimovic netted his 19th Ligue 1 goal as Paris St Germain snatched a clinical 1-0 win at Girondins Bordeaux to reclaim top spot.
Ibrahimovic scored after collecting a through ball from Lucas to put PSG on 42 points from 21 matches. They lead Olympique Lyon, who drew 0-0 with Evian Thonon Gaillard, on goal difference.
Olympique Marseille are third one point off the pace after Andre-Pierre Gignac's last-gasp goal earned them a 3-2 comeback home win against Montpellier.
Nice are fourth, seven points behind PSG, as they continued their surprising run with a 2-0 win at Lille.
Mario Mandzukic struck twice to steer Bundesliga leaders Bayern Munich to a 2-0 win over bottom club Greuther Fuerth and protect their nine-point lead as the league resumed after a four-week mid-season break.
Champions Borussia Dortmund demolished hosts Werder Bremen 5-0 with a dazzling display of attacking football to prove they are still in the title hunt, albeit 12 points off the pace in third place.
Dortmund took Bremen apart and scored seemingly at will with five different players on the scoresheet. Marco Reus gave the visitors the lead, Mario Goetze, Felipe Santana - donning a face mask due to a broken nose, Robert Lewandowski and Jakub Blaszczykowski also scored.
Bayern, who secured a major coup in midweek when they announced the signing of former Barcelona coach Pep Guardiola for next season, have 45 points, with second-placed Bayer Leverkusen on 36 after beating Eintracht Frankfurt 3-1 in a game briefly halted when Frankfurt fans lit flares in the stands and ignited fireworks that went off above the pitch.
Champions Porto beat Pacos de Ferreira 2-0 at home to maintain their unbeaten season in the Portuguese Premier League and go level on 36 points with fierce rivals Benfica at the top of the table.
Second-half goals from Brazilian left back Alex Sandro and newly signed Russia international Marat Izmailov sealed the northern club's well-deserved win.
Benfica could pull away at the top again when they travel to Moreirense on Monday. (Editing By Alison Wildey)
- Sports & Recreation