Atletico were the better team throughout the match but needed a headed goal by central defender Leonardo Silva from Ronaldinho's cross three minutes into added time to secure the three points.
Fluminense had their lead cut to six points with six matches remaining as they chase a second Brazilian title in three seasons.
"We cut the points difference and now we can believe more in [winning] this title," former FIFA world player of the year Ronaldinho told reporters.
"We came to this match against direct [title] rivals with a certain margin and could afford to lose a bit of it today," Fluminense's goalkeeper Diego Cavalieri said.
All the goals came in the second half with former Everton and Manchester City striker Jo scoring twice for the home side.
The teams were level at half-time only because Cavalieri made a string of saves to keep "Flu" in the game and two shots hit the posts.
Atletico also had a goal controversially disallowed when Ronaldinho, looking for his first Brazilian championship, put a free-kick in the net but the referee ruled against the home side for pushing by Leonardo Silva in the wall.
Fluminense, who would have taken a huge step towards the title with a victory that would have put them 12 points clear, went ahead 10 minutes into the second half through winger Wellington Nem.
Ronaldinho laid on the equaliser in the 69th minute for Jo, who shot high into the net, and the striker headed Atletico in front 13 minutes later from young midfielder Bernard's cross.
Flu captain Fred equalised four minutes from time but Leonardo's winner from Ronaldinho's perfect cross dashed his team's hopes of keeping their nine-point lead.
At the bottom end of the standings, record eight-times champions Palmeiras beat Cruzeiro 2-0 at home with a brace from Argentina striker Hernan Barcos but remain in the relegation zone.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.