Brilliant hostile bowling led by Trent Boult, who took 3-30, restricted Delhi to 156-7. Mumbai powered to 157-5 with eight balls to spare and captain Rohit Sharma hitting 68.
Sharma, 33, led the chase in his 200th IPL appearance to inspire the most successful team in the Twenty20 tournament to add to triumphs in 2013, 2015, 2017 and 2019.
Boult took opener Marcus Stoinis with the first ball of the final in Dubai, giving the upstart Delhi side a grim warning of the tough night ahead in the empty stadium.
Ajinkya Rahane was caught behind for two in Boult's next over. Jasprit Bumrah's fiery pace also kept Delhi in check.
Mumbai brought in off-spinner Jayant Yadav to bowl the fourth over and he immediately bowled in-form opener Shikhar Dhawan for 15.
Delhi skipper Shreyas Iyer, who made an unbeaten 65, and Rishabh Pant rebuilt the innings with a partnership of 96.
But Australian paceman Nathan Coulter-Nile took Pant's wicket for 56 -- his first fifty of a disappointing season.
Boult got Shimron Hetmyer for five with a slower short ball and he returned figures of 3-30 from four overs of devastating left-arm pace.
Iyer went past 500 runs in a season for the first time but Delhi managed just 38 runs in the last five overs, with the loss of three wickets, and Mumbai quickly took control of the run chase.
Sharma and Quinton de Kock set a blistering pace with 45 runs in the first 25 balls before De Kock was caught behind off Stoinis for 20. Later Suryakumar Yadav was run out for 19 in a mix-up with Sharma.
Sharma hit four sixes and five fours in his 51-ball innings and nearly finished the game off with Ishan Kishan but fell to South African quick Anrich Nortje just before the end.
Kishan stood firm with his unbeaten 33 as Mumbai got the better of Delhi for the fourth time this year, including a drubbing in the first semi-final qualifier.
Delhi fast bowler Kagiso Rabada took the wicket of Kieron Pollard, for nine, to lead this season's bowling rankings with 30 scalps over Mumbai's Bumrah on 27.