The team from Rio de Janeiro took the lead with Wellington Silva, in the first half, but the team from São Paulo improved after the break. A number of substitutions by Fernando Diniz in the second half inspired a comeback win with goals from Brenner, Luciano and Vitor Bueno.
Fluminense started the better side and looked more threatening in attack.
Within the first 20 minutes, they had already taken three shots on goal and São Paulo keeper Tiago Volpi had to stay alert to keep his side in the game.
Both sides continued to chase for an opener until Flu opened the scoring with Wellington Silva in the 40th minute. They took that lead to the end of the first half.
Second half was a completely different story and São Paulo resumed much better. Juanfran, Igor Gomes and Brenner came in from the bench and it was a game changer.
Brenner got the equalizer in the 50th minute and Luciano completed the come-back four minutes later. In the 92nd minute, Vitor added more gloss to the score line and put the game beyond doubt for Tricolor. It was a massive victory for Fernando Diniz.
With the victory, São Paulo surpassed Flamengo and went to 16 points. In addition, they closed the gaps on leaders Inter who drew 2-2 with Bahia in Beira-Rio and went up to 17 points. Fluminense, with 11, lie in eighth position.
The two teams return to the field on Wednesday. Fluminense take on Flamengo in Maracanã while São Paulo receives Bragantino in an earlier fixture on the same day.