Listen to this article
SAG rider Gardner, son of 1987 500cc champion Wayne, led for much of the race after passing Marcel Schrotter (Intact GP) to grab the early advantage on lap two of 23.
After resisting a challenge from Schrotter on lap six, Gardner also saw off Alex Marquez on lap 11, repassing the Marc VDS rider at Turn 7 after relinquishing the lead at Turn 5.
Schrotter then passed Gardner on lap 12 to enjoy a spell out front, but was demoted again by the Australian rider at Turn 5 four laps later.
Shortly after, Baldassarri, having picked off Marquez, moved clear of Schrotter for second, and then caught up to the back wheel of Gardner.
On lap 20, the decisive move of the race came at Turn 5, as Baldassarri gently nudged Gardner out of the way at Turn 5 to grab a lead he wouldn't lose.
The Pons rider crossed the line 1.244 seconds clear to register his fourth grand prix win.
Gardner ran wide and dropped to third behind Schrotter, but managed to grab the position back before the German slipped down the order, scoring his first-ever podium.
Marquez completed the top three ahead of Iker Lecuona (American Racing), who beat Brad Binder (Ajo) to top KTM honours.
Schrotter ended up sixth after his late slump, ahead of Luca Marini (Sky Racing VR46), who lost out on the last lap running wide at Turn 7 while scrapping with Binder.
Jorge Navarro (Speed Up) and a pair of rookies, Enea Bastianini (Italtrans) and Somkiat Chantra (Team Asia), completed the top 10.
Qatar runner-up Tom Luthi (Intact) was an early retirement as he crashed after tagging Binder's rear wheel during the early exchanges.
Sam Lowes (Gresini) crashed unaided on the same lap, while reigning Moto3 champion Jorge Martin (Ajo) and both MV Agusta riders, Stefano Manzi and Dominique Aegerter, also fell.
Poleman Xavi Vierge (Marc VDS) didn't even make the start of the race as his bike shut down on the warm-up lap.
Baldassarri now holds a 17-point lead over Gardner, while Schrotter lies third, 23 points down.
UPDATE: Binder was given a one-position penalty for "riding in an irresponsible manner", the South African making contact with Schrotter at Turn 3.
He dropped down to sixth as a result, with Schrotter gaining a position.
|1||7||Lorenzo Baldassarri||Kalex||23 laps|
|8||9||Jorge Navarro||Speed Up||7.459|
|13||89||Khairul Idham Pawi||Kalex||16.613|
|23||20||Dimas Ekky Pratama||Kalex||4 laps|
|Ret||24||Simone Corsi||Kalex||2 laps|
|Ret||88||Jorge Martin||KTM||5 laps|
|Ret||11||Nicolo Bulega||Kalex||5 laps|
|Ret||21||Fabio Di Giannantonio||Speed Up||11 laps|
|Ret||22||Sam Lowes||Kalex||18 laps|
|Ret||12||Thomas Luthi||Kalex||18 laps|
|Ret||62||Stefano Manzi||MV||22 laps|
|DNS||97||Xavi Vierge||Kalex||23 laps|
Fernandez set for surgery after heavy Termas crash
'Euphoria' for Gardner after Moto2 podium breakthrough