Ibrahimovic scored from the penalty spot to enrage the Inter fans who once adored him as Milan earned a crucial three points on a 10-man side after teammate Ignazio Abate’s second half dismissal, underlining its title credentials.
Earlier in the day, Lazio had briefly topped the standing after beating Napoli 2-0 in Rome.
The defeat means Inter dropped to fifth in Serie A, six points behind their arch rivals across town, but Ibrahimovic insisted there is a long way to go yet.
“There’s still a lot of games left, it’s a bit of a gap, but we’ll play one game at a time. The team is in good shape, we’re focussed. We worked really hard and there was great sacrifice in the second half with a man down. We played with heart,” he said on Sunday.
Milan set their stall out from the off with some vibrant counter attacking football. Three minutes in, Abate got to the byline down the right and crossed for Dutch midfielder Clarence Seedorf, who should have done far better than head wastefully high.
However, just moments later, AC Milan had won a penalty as Seedorf released Ibrahimovic down the right and as he entered the area he dragged back the ball, only for Marco Materazzi to take his legs out from under him.
Ibrahimovic stepped up amid a cacophony of boos to smash home the spot-kick. Milan really should have had another as Ibrahimovic again beat the offside trap, but his cross to the waiting French midfielder Mathieu Flamini was imprecise and cut out by a back-tracking Brazilian defender Lúcio.
Materazzi then took the ball away from Seedorf as Ibrahimovic tried to tee him up from close in.
Massimo Ambrosini hit a diagonal ball over the top to Ibrahimovic, who tried a Marco van Basten-esque volley from an angle that fizzed just over.
Brazilian striker Robinho had the ball in the net 22 minutes in, but was denied by a linesman’s flag.
Inter didn’t start exerting pressure until the end of the half when Dutch midfielder Wesley Sneijder shot a free-kick into the side netting.
Early in the second period, Sneijder had another free-kick from close in and although he struck it well, Christian Abbiati beat it away with his fists.
Momentum swung Inter’s way at the hour mark when Abate picked up a
second booking after a tiff with Macedonian winger Goran Pandev, with Milan coach Massimiliano Allegri immediately replacing forward Robinho with full-back Luca Antonini.
Centre-back Materazzi then had to come off after a nasty clash with Ibrahimovic and Inter coach Rafael Benitez made the bold move of replacing him with French winger Jonathan Biabiany.
Yet it was Seedorf who was inches away from doubling Milan’s lead with a shot from 20 yards. Push as Inter did, it created little of real substance as a dogged Milan held out for the win in the derby clash.