Leaders Atletico Madrid have dropped what could prove to be crucial points in La Liga's title race with a 2-1 defeat at Athletic Bilbao after Barcelona pulled level with Real Madrid courtesy of a 2-1 win over Villarreal.
Diego Simeone's Rojiblancos have 73 points from 33 games, two more than defending champions Real Madrid and Barcelona, although the Catalans have one game in hand.
Athletic took the lead when Alex Berenguer headed a deflected cross past Jan Oblak in the ninth minute.
Stefan Savic equalised when he headed home in the 77th minute after Athletic goalkeeper moved off his line to try and claim a corner and was left stranded.
However, Inigo Martinez snatched a winner for the hosts with four minutes on the clock, powerfully heading home a corner at the other end.
"We wanted to win the game of course, and that's football. We will keep fighting until the end and we believe we can do it," Atletico captain Koke said.
Atletico last won the Spanish title in 2014.
If Barcelona win their remaining six games, which includes a clash with Atleti, they will secure another domestic triumph.
Antoine Griezmann's brace earned the Catalans a nervy win at Villarreal.
The French striker finished sublimely less than 90 seconds after Samu Chukwueze sent Villarreal ahead.
Griezmann struck again in the 35th minute after a glaring Juan Foyth error to put to complete the turnaround.
Villarreal were greatly improved in the second half but had Manu Trigueros sent off for a wild tackle on Barcelona captain Lionel Messi.
"We all want to win La Liga, but there are four teams fighting for it," Griezmann told Movistar.
"We will try to win all our games, it's the only way to become champions."
Sevilla earned a 2-1 win over Granada with goals from Ivan Rakitic and Lucas Ocampos.
Roberto Soldado pulled one back at the death from the penalty spot.
Sevilla's victory took them to 70 points and they can't be struck from title calculations.
Elsewhere, Getafe beat relegation-threatened Huesca 2-0 and Celta Vigo won 2-1 against Osasuna.