After Atletico Madrid dumped them out of Europe's elite club competition on Wednesday, Barca were looking for a morale-boosting win that would have put them two points clear of Atletico, who play at Getafe on Sunday, at the top.
They again looked lethargic and short of ideas against a club with a fraction of their resources and were undone when Alex Song surrendered possession in midfield in the 16th minute and Yacine Brahimi raced clear and fired past Jose Manuel Pinto.
Barcelona dominated the rest of the match but Granada, who are fighting to avoid relegation, held firm against waves of attacks and the Catalan giants suffered a second consecutive defeat that will increase the pressure on coach Gerardo Martino.
Atletico can stretch their lead over second-placed Barca to four points with a win at Getafe on Sunday, while Real Madrid, who are third, can move level on points with Atletico if they beat second-bottom Almeria at the Bernabeu later on Saturday.
"This is a step backwards," Barca playmaker Andres Iniesta, who was captaining the side in place of the rested Xavi, said in an interview with Spanish television broadcaster Canal Plus.
"Sometimes it's hard to find an explanation when you lose but we just couldn't get the goal," added the Spain international who won the title with Barca last season.
"Teams like Granada who are playing for their La Liga survival live and die on chances like the one they scored but that was too much punishment for us.
"We tried everything we could to score. It hurts having taken this step backwards with so few matches left."
Atletico, closing in on their first La Liga title since 1996, have 79 points ahead of Barca on 78 and Real with 76. Granada's win puts them six points away from the relegation places into 13th place on 37 points.
Earlier, Jeremy Perbet headed a last-gasp goal for Villarreal to secure a 1-0 victory at home to regional rivals Levante that lifted them above Real Sociedad into sixth.
Sociedad twice surrendered the lead at Celta Vigo, who had defender Jon Aurtenetxe sent off two minutes after halftime, in a 2-2 draw at the Balaidos stadium.
Villarreal have 52 points, one ahead of Sociedad and one behind fifth-placed Sevilla, who visit city rivals Real Betis on Sunday.
- Sports & Recreation
- Atletico Madrid
- Yacine Brahimi
- Real Madrid