Inter needed only to match Borussia Dortmund's result -- the Germans beat Slavia Prague 2-1 -- but were unable to win against a much-changed Barca side at the San Siro on Tuesday.
The Spanish champions, who had already qualified as group winners, took the lead in the first half through Carles Perez, but Romelu Lukaku's deflected effort drew the hosts level just before the break.
Lautaro Martinez had two goals ruled out for offside in the second half before substitute Fati struck in the 87th minute to relegate Inter to the Europa League.
Ernesto Valverde took the decision to rest the majority of his starters, including Lionel Messi, but his squad players showed that they can deliver, too. What was most impressive about the win was that it came against an Inter side who were fighting to stay in the competition.
Perez produced a good performance, and he is well-established as a first-team player. He's proving to be the perfect backup to Barca's big-name forwards.
The headlines were stolen by Fati, though. The Spain Under-21 international's goal saw him become the competition's youngest scorer at 17 years, 40 days, taking the long-standing record from Olympiakos' Peter Ofori-Quaye (17 years, 194 days).
Not much, really. This wasn't a vintage performance, but it would be harsh to criticise a team playing together for the first time. Many of the players had played very little football this season before this game.
Manager rating (out of 10)
7 -- Valverde will be very happy with his night's work. Not only did he get to rest players ahead of games against Real Sociedad and Real Madrid, but his team also delivered the goods on the pitch. His decision to play a back three to deal with Lukaku and Lautaro just about paid off.
Player ratings (1-10; 10 = best, players introduced after 70 minutes get no rating)
GK Neto, 7 -- The Brazilian made his competitive debut for Barca and could do little about Lukaku's goal, which took a big deflection. Made a couple good saves on the Belgian and his strike partner Lautaro to keep Inter to one.
DF Jean-Clair Todibo, 6 -- Perhaps a little loose on Lautaro in the buildup to the goal but other than that did well when you consider he's still 19 and has played very little this season.
DF Samuel Umtiti, 5 -- Deflected Lukaku's goal past Neto, and only the offside flag saved him from being at fault for another. Didn't look comfortable in a back three.
DF Clement Lenglet, 6 -- Produced one great block on Lukaku early on but then missed a glorious chance at the other end to make it 2-0.
MF Moussa Wague, 6 -- Lively on the right wing but ineffective in the final third. Will have been happy to have got 90 minutes, though.
MF Ivan Rakitic, 6 -- The Croatian has come in from the dark to make four straight starts in all competitions. He even wore the captain's armband in Milan and will be hoping he can stay in the team for next week's Clasico.
MF Carles Alena, 8 -- The academy graduate did well in his first start since August. One great pass led to an early Perez chance, and his performance should mean it won't be another four months until his next start.
FW Carles Perez, 8 -- Was a constant threat. Had a shot well-saved early on from a tight angle and then netted his first Champions League goal on his first start in the competition with a cool finish.
FW Antoine Griezmann, 7 -- Looked comfortable in his role as the main man in the team. Helped set up the goal before coming off for a breather in the second half.
FW Luis Suarez, 6 -- Still waiting for his first European away goal since 2015. A late free kick was well saved.
MF Frenkie de Jong, 6 -- Added fresh legs to the midfield, and his driving run set up a golden chance for Perez.
FW Ansu Fati, 7 -- Only came on for a short while, but he will never forget this night as his record-breaking season continued.