Porto joined Manchester City in the Champions League knockout stages after a 0-0 draw where Gabriel Jesus was denied a winning goal by VAR.
Pep Guardiola's side were already through to the last-16 and will now progress as group winners, although they will be frustrated to have lost their 100 per cent record in this season's competition having dominated for long periods at Estadio do Dragao.
Jesus scored on the rebound when Agustin Marchesin tipped his 80th-minute header onto the crossbar, although replays showed Joao Cancelo was fractionally offside before delivering his cross to the Brazil striker.
Marseille's win over Olympiacos rendered this match to be academic, with the other two teams in Group C on three points apiece.
City penned Porto into their own half for most of the opening exchanges, while each side had penalty claims ignored by referee Bjorn Kuipers - first when Malang Sarr slid in on Raheem Sterling before Ederson robustly met fellow Brazilian Otavio in his area.
Ederson palmed Diogo Leite's 22nd-minute header out of his goalmouth, sparking a rapid break where opposite number Agustin Marchesin thwarted Ferran Torres.
Sarr made a vital clearance over his own crossbar when Sterling scampered in behind the Porto defence, with the England winger's shot from the resulting corner cleared off the line by Zaidu Sanusi.
Phil Foden's sumptuous 58th-minute throughball found Sterling, although Marchesin was equal to the task and Torres' footing deserted him when the rebound fell his way.
In a remarkable 70th-minute sequence, a stretching Ruben Dias inadvertently hooked a Sterling attempt out of the Porto goalmouth, with Marchesin equal to Torres' overhead kick follow-up.
The home goalkeeper made another brilliant save from Dias' centre-back partner Eric Garcia, earning his VAR reprieve by the time he was finally beaten by Jesus.
0 - Pep Guardiola has seen his side draw 0-0 in the Champions League for the first time in 59 games since a nil-nil against Shakhtar Donetsk in February 2015 when manager of Bayern Munich. Stalemate. pic.twitter.com/fnTDHigegi— OptaJoe (@OptaJoe) December 1, 2020
What does it mean? City's problems in front of goal remain
If Saturday's 5-0 demolition of Burnley hinted at an end to an unusually fallow spell for Guardiola's attack, this latest outing suggested their shot-shy struggles of 2020-21 are set to continue. Despite dominating possession, City could only muster a solitary shot on target during the first half, while a final tally of 18 attempts is their most at goal without scoring in a Champions League match.
Until Jesus' arrival in the 71st-minute they continued to lack cutting edge. Getting and keeping Jesus and Sergio Aguero - again a knee injury absentee - fit feels key to their chances of success this term.
Marvellous Marchesin stands tall
Marchesin will probably have been grateful to see fellow Argentine Aguero missing out, although he may very well have blunted his illustrious countryman in this mood.
The fact no Porto outfield player bettered Marchesin's 29 touches in the first half said much for their limited attacking intent; his five impressive saves showing he was more than up to the task as the last line of a deep-lying defence.
Zinchenko passes up chance to impress
Guardiola's decision to field naturally left-footed players on his left flank during the Champions League campaign has generally led to more free-flowing displays when compared to City's stuttering Premier League efforts.
This contest might not have been so attritional had Zinchenko found his range when roving from left-back. The Ukraine international linked well with Foden and Bernardo Silva to frequently find himself in good positions in the final third, but none of his 10 crosses from open play were successful.
Key Opta facts
- Porto remain winless in their last six Champions League games against English sides (D2 L4), failing to score in four of those meetings.
- City have progressed as group winners for the fifth time in six seasons, only failing to do so in 2016-17 (when they finished second to Barcelona).
- Porto have ended a run of 14 Champions League home games without a draw, this their first since September 2016.
- City have kept four consecutive clean sheets in the Champions League for the first time, as many as they managed in the group stages in their last two campaigns combined.
- Guardiola has seen his side draw 0-0 in the Champions League for the first time in 59 games.
City will chase back-to-back Premier League wins for the first time this season when they entertain Fulham on Saturday, when Porto are at home to Tondela in the Primeira Liga.