Buttler, who scored 100 not out against Royal Challengers Bangalore 10 days ago, edged and mistimed his way to 42 from his first 33 balls – and the Royals needed 96 from the last 36 balls as wickets fell around him.
Rovman Powell struck an important 26 from 13 balls but he was trapped lbw in the 17th over by Sunil Narine – who had hit a brilliant 109 in Kolkata’s 223-6 – leaving the Royals seven down and Buttler without any frontline batters to partner.
Buttler started the 18th by hitting Mitchell Starc for a straight six – and later in the over, his England team-mate Phil Salt, Kolkata’s wicketkeeper, let one through his gloves from the Australian left-armer, which ran away for five crucial wides.
Trent Boult sacrificed his wicket with a run out to allow Buttler to keep the strike throughout Starc’s over and the opener hit seamer Harshit Rana for two more sixes in the 19th to leave nine runs required from the last.
A six from the first ball took Buttler to three figures from 55 balls before he turned down singles from the next three balls to protect number 10 Avesh Khan.
With three needed from two balls, Buttler raced back for two and flicked the final delivery off his pads to complete the win.
Listen to commentary on Gujarat Titans v Delhi Capitals on Wednesday, 17 April (15:00 BST) on BBC Radio 5 Sports Extra, BBC Sounds and the BBC Sport website & app (UK only).