Jorge Martin barged past title rival Francesco Bagnaia early on in the MotoGP sprint at Lusail on Saturday, before he swept on to win the race.
Bagnaia finished fifth, allowing the Spaniard to cut the gap in the standings to seven points with Sunday's race and the season-ending sprint and race in Valencia to come.
"I was thinking I had the potential to win but in a race you never know," said Martin. "Tomorrow is the big day. Hopefully we can record more points."
Spaniard Martin of Ducati satellite team VR46 was followed home by Italians Fabio Di Giannantonio and Luca Marini.
Alex Marquez was fourth, as Ducatis occupied the top five places.
Bagnaia, the reigning champion, and Martin started on the second row. They bumped at the first corner, but the Italian held off Martin, who then lost ground.
"I went wide and found myself behind Pecco and Marc Marquez," said Martin after the race. "I had to work my way past them."
On the second lap, Martin overtook Honda's Marquez before attacking Bagnaia on the inside on the next lap, touching knees as he passed.
As the Spaniard roared away, Bagnaia lost momentum and was also passed by Di Giannantonio.
Martin chased down Alex Marquez and Marini with Di Giannantonio, who had made a slow start from the front row, in pursuit.
Bagnaia was never able to close the gap, eventually finishing 3.957 seconds behind the winner.
The result ensured that the title cannot be decided in Sunday's main race.
"The best sprint I did so far this year," said Martin. "To recover after a difficult first lap to overtake Pecco was a nice race."
Marco Bezzecchi finished 13th, and out of the points, but remained third in the standings although he is now 94 points behind Bagnaia.
nb/pb/nf