Marco Bezzecchi wins Dutch MotoGP sprint race
Fabio Quartararo completed the podium after third-placed Brad Binder was demoted to fifth following a long lap penalty for track limits.
Bagnaia took command of the 13-lap dash around the classic motorcycling venue at turn one from Binder as pole sitter Bezzecchi was caught napping, dropping to third.
Bezzecchi bided his time and moved back to race second, leaving Bagnaia in his crosshairs.
Ten laps to go and Bezzecchi muscled past his good friend and compatriot to regain the lead, quickly opening up a half second gap.
At the midway point it was Bezzecchi's race to lose.
And the Italian, who dominated practice and set a record lap time in qualifying, didn't disappoint, even extending his lead at the line to 1.294sec.
Riding for Valentino Rossi's VR46 Ducati-satellite team he displayed a touch of the Italian legend Rossi's showmanship, climbing a camera gantry to milk the applause from his growing number of fans.
"I felt amazing today on the bike," he said after his first sprint win.
"I made a mistake on the first corner and lost two places.
"But I kept myself calm and my pace was good I came back and I'm very happy.
"I hope the fans enjoyed it - see you tomorrow!"
Bagnaia goes into Sunday's eighth round of the season leading the championship by 21 points from Jorge Martin (sixth), with Bezzecchi a further 10 points back in third.