Both teams came into the match in fine form and off the back of UEFA Europa League victories, but Inter's recent resurgence was ended as substitute Mohamed Salah struck for the visitors early in the second half.
Roberto Mancini's men, for whom Fredy Guarin hit the post in the first half, were unable to respond as - following three straight league wins - they lost ground in their pursuit of a European place.
Fiorentina, meanwhile, were able to celebrate a 12th game without defeat across all competitions and a first league win against Inter at San Siro since May 2000.
Nenad Tomovic was on the scoresheet when Fiorentina routed Inter 3-0 in the reverse fixture in October, and he returned in place of Micah Richards for this encounter.
The Serbian was encouraged to get forward from right-back in the early stages as the visitors put their stamp on the contest, forcing Inter back with plenty of possession in good areas.
Mancini's men, on the other hand, were sloppy and wasteful with the ball.
One particularly disjointed attack led to Fiorentina's best break in the 17th minute, but Manuel Pasqual's low cross from the left evaded Khouma Babacar, before reaching the grateful Samir Handanovic.
This sparked Guarin into life at least, and a minute later the Colombian showed great skill to slip past Pasqual and cut back from the byline on the right, but Fiorentina scrambled clear.
Inter improved after that without ever taking control, although Guarin almost gave them the lead in the 35th minute.
Buoyed by his sensational midweek goal against Celtic, the midfielder fired in a right-foot drive from the edge of the box after shrugging off a couple of challenges. The strike had Neto beaten, only to bounce wide off the far post.
Fiorentina lost top scorer Babacar to injury at the end of the first half, but it was his replacement, Salah, who pounced to snatch the lead in the 55th minute.
The on-loan Chelsea man was first to react when Handanovic - playing his first match since returning from an ankle injury - spilled a Pascual cross into his path, smashing into the net from 10 yards.
Inter substitute Xherdan Shaqiri impressed after replacing Lukas Podolski and almost fashioned an equaliser in the 72nd minute.
The Switzerland international pulled the ball back for Mauro Icardi, but the striker blazed over from 12 yards at the end of a neat move.
A neck injury to Tomovic and a nasty knock for Stefan Savic forced Fiorentina to play the closing stages with nine men, having made all three changes.
Sandwiched between those two blows was a great chance for Rodrigo Palacio, but his low shot was saved by Neto, who then tipped a Guarin header over the bar in added time as Fiorentina clung on.
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.