The Nerazzurri had already seen a goal disallowed before Calhanoglu fired past Marc-Andre ter Stegen in first-half added time at San Siro on Tuesday.
The LaLiga leaders improved in the second period and saw a goal of their own ruled out when Pedri’s tap-in was ruled out for an Ansu Fati handball.
But despite some late pressure and a penalty shout for Barca, under-fire Simone Inzaghi’s men held on to earn three points which put them above the Catalan giants.
Inter thought they had a penalty when Joaquin Correa’s flick came off Eric Garcia’s arm, but after referee Slavko Vincic took a look at the pitchside monitor, Lautaro Martinez was deemed to be marginally offside in the build-up.
Correa then had a goal disallowed, showing great composure to take it around Ter Stegen and finish, only to watch the linesman’s flag go up before he could celebrate.
Calhanoglu broke the deadlock for Inter with a superb strike in first-half injury time, taking a touch to control Federico Dimarco’s pass before rifling into the bottom-left corner from 25 yards out.
Ousmane Dembele nearly levelled when his drive from a tight angle came back off the left post as Barcelona pressed after the interval.
Xavi’s men then had a goal chalked off, as Dembele’s cross caused havoc in the Inter box before Pedri applied the finish, but only after Andre Onana had tipped the ball onto Fati’s hand.
There were strong claims for a Barcelona penalty in stoppage time when the ball appeared to come off Denzel Dumfries’ arm, but no spot-kick was awarded following a VAR check and Inter clung on for three precious points.