A minute before half time Valdes gathered the ball just outside his box and inexplicably presented it to David Villa who duly chipped it over the keeper's head and into the empty net.
It was Barca's second league defeat in a week after Atletico Madrid took all the points at the Nou Camp last Sunday.
Celta Vigo reclaimed fifth spot after a penalty from leading striker Fernando Baiano gave them a 1-0 win at home to an out-of-sorts Villarreal.
The win left Celta a point clear of Sevilla and four behind Valencia and Osasuna.
Villarreal, who have won just one of their last seven games, dropped to eighth place, a point behind Deportivo la Coruna who snatched a 1-0 win at Real Betis thanks to an injury-time goal from striker Ruben Castro.
Real Madrid restored some pride after their 6-1 mauling at the hands of Real Zaragoza in the Cup with a 2-0 win away to relegation-threatened Athletic Bilbao on Saturday, while Alaves hauled themselves out of the relegation zone for the first time in two months with a 3-2 win over fellow strugglers Malaga.
In Italy, Filippo Inzaghi scored a hat-trick as AC Milan thumped Reggina 4-1 yesterday, while Roma beat Siena 2-0 for their ninth consecutive league victory, leaving them one win short of equalling the Serie A record.
Carlos Paredes headed Reggina in front before Milan turned on the style in Calabria to claim only their sixth win in 13 away from home.
Brazilian midfielder Kaka set up Inzaghi for the equaliser before Alberto Gilardino headed home a left-wing cross from substitute Serginho. Inzaghi gave Milan a two-goal cushion by converting Kaka's cut-back before the veteran completed his treble with a tap-in from Serginho's cross.
Siena were left to rue a first-half penalty miss by Enrico Chiesa.
Roma's gritty win boosted their hopes of a Champions League place next season, leaving them two points behind fourth-placed Fiorentina who crashed to a 2-0 defeat at Livorno.
Luca Toni missed a first-half penalty for Fiorentina before Cristiano Lucarelli's double.
An Allesandro Del Piero strike five minutes from time gave leaders Juventus all three points in last night's big game against Inter at the San Siro.
Juve's Swedish striker Zlatan Ibrahimovic gave them the lead after 63 minutes but Walter Samuel equalised for Inter 11 minutes later. However, Del Piero struck to extend Juve's lead at the top to 12 points.
Palermo beat struggling Empoli 1-0 thanks to Andrea Barzagli's last-gasp winner and Sampdoria climbed to eighth after beating Messina 4-2.
Elsewhere there were goalless draws in the relegation scraps between Parma and Ascoli and Cagliari and Lecce.
On Saturday Nestor Sensini's debut as coach of Udinese ended in a 1-1 draw away to his former club Lazio, while Chievo boosted their chances of a UEFA Cup place by winning 2-1 at relegation-threatened Treviso.
In Germany, Roy Makaay and Michael Ballack combined to give Bayern Munich a 2-1 win at home to Nuremberg, sending the champions 10 points clear at the top of the Bundesliga.
With 21 matches gone, Bayern lead with 51 points and appear near certainties to win a 20th league title. Hamburg SV are second on 41 after winning 1-0 at home to Mainz with Werder Bremen now a point further back in third following a shock 2-0 defeat at home to Kaiserslautern.
NAC Breda scored two late goals to draw 3-3 with Feyenoord in the Dutch first division yesterday but PSV Eindhoven are top of the table with 60 points following their 1-0 win over Heracles Almelo on Saturday.
AZ Alkmaar have 55 points as do Feyenoord. Ajax climbed to fifth on 40 points, level with Heerenveen and Groningen, who beat bottom side RBC Roosendaal 2-1.