Lille clinched its first Ligue 1 crown since 2011 as they beat Angers 2-1 away in the final round of matches on Sunday.
Jonathan David and Burak Yılmaz found the back of the net to put Christophe Galtier's side on 83 points, one ahead of Paris Saint-Germain, who beat Stade Brest 2-0 away.
Angelo Fulgini pulled one back in added time at the end of the match, but the hosts couldn't stop Lille from becoming champions for the fourth time in its history.
The match was played behind closed doors due to COVID-19 restrictions, but fans poured into the streets of Lille to celebrate at the final whistle.
Supporters lit flares and chanted songs in the northern city's central Place, Charles de Gaulle, in jubilation at a historic triumph against far wealthier opposition.
"This is exceptional. It's been a long day and a lot of pressure. To beat Paris Saint-Germain to the league title is something exceptional," a jubilant Galtier said to Canal+.
"The players were amazing ... the credit goes to the players, they are the heroes."
The title triumph came after another away success for Lille, who finish the season unbeaten on the road since November and ends a three-year league winning streak for PSG.
It was fitting that it was David and Yılmaz who scored the crucial goals at Angers, as both have been key to an improbable run to the title that has also held significant pressure from Monaco.
Canadian young gun David latched on to a superb Renato Sanches pass to coolly slot home his 13th of the league season with nine minutes on the clock, immediately calming any nerves after last week's disappointing draw with Saint-Etienne left them needing a win to make sure of the title.
David was the man who won the penalty that secured the points and the championship just before the break, Paul Bernardon bringing the 21-year-old down and allowing Yilmaz to score his 16th league goal of a remarkable season for the veteran Turkey striker.
Mauricio Pochettino's PSG will have to settle for the French Cup in a disappointing season for the mega-rich club.
They lost eight times – a record since they were taken over by Qatar Sports Investments in 2011 – and took only one point from its two matches with Lille.
Neymar had already missed a penalty when they took the lead in the 37th minute at Brest thanks to a freak own goal from Romain Faivre, who somehow diverted Angel Di Maria's corner into his own goal from way out near his own touchline.
Kylian Mbappe made sure of the win in the 71st minute, but by that time the destination of the title was already as good as certain.
"There are no worries. We lost the title and now we have to focus on the future," said Mbappe, who was crowned Ligue 1 top scorer for the third year in a row.
Monaco won the race for the final Champions League position despite only managing a goalless draw at Lens, as Lyon lost 3-2 at home to mid-table outfit Nice and allowed the Principality club to claim the third spot.
Rudi Garcia revealed he will step down as Lyon coach after only leading his team to the Europa League.
"I wanted to quit the club with them in the Champions League, but it's not happened," said Garcia, who led Lille to the 2011 title.
"I will speak to the president (Jean-Michel Aulas) on Monday, but I decided a long time ago that I will not continue here."
Lyon will be in the Europa League alongside fifth-placed Marseille, who scraped a 1-1 drew at Metz thanks to a penalty from Arkadiusz Milik in the 14th minute of added time.
Milik struck from the spot in an incredible ending to a match which came seven minutes after Farid Boulaya had given 10th-placed Metz the lead with a stoppage-time spot-kick of his own.
Nantes finished in the relegation play-off place after losing 2-1 at home to Montpellier. The 18th-placed team will play Toulouse to decide whether they stay in the top division.
Nimes and Dijon were already relegated going into the final round of matches.