Atletico Madrid moved level on points with La Liga leaders Real Sociedad after beating Barcelona, who are now nine points adrift of the top two.
Yannick Carrasco scored the only goal on the stroke of half-time, driving in from midway inside the Barcelona half with goalkeeper Marc-Andre ter Stegen having tried to beat him to the ball.
Barcelona also lost defender Gerard Pique to injury to cap a bad night.
Pique looked visibly upset as he hobbled off in the second half.
Barcelona confirmed after the game that Pique had sprained his right knee and are “waiting for more tests to ascertain the extent of the injury”.
There is no timescale on how long Pique could be out for but reports in Spain suggest he could be sidelined for up to six months.
Barcelona rarely looked like rescuing a point from the game, with Jan Oblak’s save from a Clement Lenglet header the closest the visitors game.
The result leaves Barcelona 10th in La Liga. They have 11 points from eight games, nine behind Sociedad, who are only ahead of Atletico on goals scored, both having the same goal difference, although Atletico have a game in hand.
This win continued Atletico’s unbeaten start to the season and stretched their unbeaten run to 24 games in all competitions, while it was Barca’s third defeat in eight La Liga games.
Lionel Messi was unusually subdued, although the forward had only returned from a long trip to South America on Thursday after international duty with Argentina.
Atletico Madrid boss Diego Simeone: “It was our turn to win today but it won’t change our objectives.
“We knew exactly how we needed to play and that we would have to work as hard in attack as in defence.”
Barcelona boss Ronald Koeman: “A team like Barca cannot afford to concede a goal like that.
“It was our fault, it’s not good and we can’t let something like that happen again.”