Kylian Mbappe returned from injury off the bench but Champions League holders Real Madrid slipped to a surprise 1-0 defeat at Lille.
Mbappe, who missed the draw with Atletico in the Madrid derby at the weekend because of a hamstring injury, had to settle for a place among the substitutes at the Stade Pierre-Mauroy.
He was introduced in the 57th minute but had minimal impact as Jonathan David’s penalty in added-on time at the end of the first half secured a famous victory for Lille.
It was a first Champions League defeat for Real – who defeated Stuttgart in their opener – since May 2023, having been unbeaten in the entirety of their successful campaign last season.
Lille, meanwhile, get their first points on the board after losing at Sporting Lisbon a fortnight ago.
Mbappe might have been on the bench but one of Real’s other leading lights created an opening early on, as Vinicius Junior cut inside and directed a shot on target that was saved well by Lucas Chevalier.
Jude Bellingham missed the target before 18-year-old Brazilian Endrick showed a clean pair of heels to run clear of the Lille defence, only for Chevalier to pull off another excellent save.
Lille, though, demonstrated they were a threat although midfielder Ayyoub Bouaddi on his 17th birthday – the joint youngest player to feature in Europe’s elite club competition – was unable to free David.
David came closest to putting Lille ahead when he directed a header on goal, with Andriy Lunin making a brilliant save, with the Canadian forward unable to get his follow-up effort on target.
Just as it seemed the teams would go in level at the break, Eduardo Camavinga was adjudged to have handled in the area following Edon Zhegrova’s free-kick.
This time, David made no mistake as he found the corner, sending Lunin the wrong way.
Real might have drawn immediately level after Chevalier rushed out of his area to deny Vinicius from latching on to a ball over the top but Endrick was unable to direct his chip on target.
Zhegrova curled narrowly wide as the hosts started the second half well before Mbappe was introduced alongside Luka Modric, with Eder Militao and the lively Endrick making way.
The changes did not have the desired effect as Real became sloppy off the ball, with an off-the-pace Bellingham, Antonio Rudiger and Modric all collecting yellow cards within a short space of time.
Real, though, laid siege to Lille’s goal in the final five minutes, with the hosts clearing off the line from Vinicius’ effort while Rudiger and another sub in Arda Guler were denied by Chevalier.
Lille held on for the five minutes of time added on and there were scenes of jubilation at the full-time whistle, with Mbappe leaving the field almost instantly after Real’s defeat on his return to France.