Tensions were also high on the pitch, with Andrea Conti who had come on for Kessie after 69 minutes seeing red for a tackle on Inter striker Laurtaro Martinez, but a VAR review saw the referee change it to yellow, to the fury of Inter coach Luciano Spalletti, who was sent off for dissent.
Matias Vecino scored after just three minutes for Inter, days after his team's Europa League exit, with Stefan de Vrij adding the second on 51 minutes, to give Inter a two-goal advantage.
For Milan, Tiemoue Bakayoko headed in after 57 minutes with Mateo Musacchio reacting quickly to finish off a rebound (71), just after Lautaro Martinez slotted in the third from the penalty spot for Inter.
"We've found the young striker who can put things right for us," Spalletti said of Martinez.
Inter had also won the reverse fixture thanks to Mauro Icardi's late winner but the Argentine has not played in over a month amid a contract dispute, which saw him stripped of the captain's armband.
Inter goalkeeper Samir Handanovic cleared a late Samuel Castillejo header with Patrick Cutrone also denied a last-gasp equaliser with Danilo D'Ambrosio clearing on the line.
Inter leapfrog AC Milan and are two points ahead in third with Roma fifth, four points off the top four who will qualify for the Champions League. Lazio and Atalanta are both two points further adrift in sixth seventh respectively.