Frederic Kanoute from the penalty spot and Alexander Kerzhakov gave Sevilla a 2-0 victory over Celta Vigo that put them level on 53 points with Barca, who thumped Recreativo Huelva 4-0 away on Saturday.
Real Madrid went third on 48 points after making hard work of beating second-bottom Gimnastic 2-0 in the Bernabeu, despite playing 84 minutes against 10 men.
The visitors had defender Cesar Navas sent off soon after the start but denied Real until substitute Robinho scored early in the second half. Nastic's David Garcia put the ball in his own net near the end.
Valencia slip down to fourth on 47 after their title challenge was dented with a 2-0 home defeat by Racing Santander on Saturday.
Diego Milito's first-half goal was enough to give fifth-placed Real Zaragoza a 1-0 home win over Atletico Madrid.
The Argentine striker outstripped the Atletico defence in the 20th minute to score his 18th goal of the season in an evenly fought clash with a direct rival.
Zaragoza have 46 points, three ahead of Atletico who remain sixth on 43.
Sevilla were pushed all the way by Celta in an entertaining clash which swung the home side's way when visiting midfielder Gustavo Lopez handled Jesus Navas's cross in the 51st minute.
Mali striker Kanoute scored from the spot for his 19th of the season and Celta had midfielder Fabian Canobbio sent off midway through the second half.
Russian striker Kerzhakov scored the second on the break in the final minute.
Gimnastic started badly in the Bernabeu when defender Navas was sent off for bringing down Ruud van Nistelrooy on the edge of the area. They were lucky not to concede a penalty.
But Real failed to press home their numerical advantage and barely tested Albano Bizzarri in the visitors goal before the break, putting in an error-strewn display.
Fabio Capello brought on Robinho at halftime and he made his mark within 11 minutes when Van Nistelrooy's miscued shot fell to him at the far post to fire high into the net.
Almost immediately the Brazilian then slammed a shot against the post as he galvanised Real's attack, but the home fans had to wait until nine minutes from time before the game was settled.
Robinho lifted the ball over the defence for Michel Salgado to cross from inside the area and Raul's near-post header went in off Garcia.