Reigning Olympic champions Belgium and the Dutch were locked 2-2 in regulation time at the Kalinga Stadium.
The match between the oldest side, Belgium, and a young Dutch team was contested equally, but the more experienced defending champions ran away winners in the shootout.
Belgium have 11 players over 30 years of age, while the Netherlands have eight players below 25 and just two above 30.
The Red Sticks, who have come with almost the same set of players that won the Tokyo Olympics gold, are among the fittest and most experienced sides.
Star striker Tom Boon (27th) and Nicolas de Kerpel (45th) scored for Belgium in the regulation time while penalty-corner expert Jip Janssen (12th and 36th) struck a brace for Netherlands.
In the first semi-final, star drag-flicker Gonzalo Peillat struck a second half hat-trick as Germany made a sensational comeback after being two goals down to beat Australia 4-3 and enter the final for the fifth time.
Peillat scored from penalty corners in the 43rd, 52nd and 59th minutes while ‘Player of the Match’ Niklas Wellen (60th) struck with just a few seconds left in the match to stun Australia, who squandered a 2-0 half-time lead in a dramatic semi-final.
Jeremy Hayward (12th), Nathan Ephraums (27th) and Blake Govers (58th) scored for Australia, who will now play for the bronze medal on Sunday.
This was two-time champions Germany’s first entry into the final after the 2010 edition in New Delhi where they had finished runners-up. They had won silver in 1982 before winning titles in 2002 and 2006.
Germany also took revenge for their 1-3 loss to Australia in the Tokyo Olympics semifinal.
For three-time champions Australia, this was their second consecutive failure to enter the final. They had lost to the Netherlands at the same stage in 2018, finishing with a bronze after consecutive titles in 2010 and 2014.
Australia were leading 2-0 till the 42nd minute and it looked like they would run away with the match. But the three drag-flick goals from Peillat, who has played more than 100 matches for Argentina and won the 2016 Rio Olympics gold for the Las Leonas before becoming a German citizen, changed the complexion of the game.
In the second semi-final, Jip Janssen gave the Dutch the lead in the 12th minute from the side’s second penalty corner as he sent a low drag flick past Belgium goalkeeper Vincent Vanasch.
The Netherlands were doing most of the attack with Floris Wortelboer making a fine run into the Belgium circle but his cross from the baseline could not find anybody near the goalmouth.
Belgium struck back three minutes before half time with their star player Tom Boon scoring from a penalty corner as the scoreline read 1-1 at the breather.
Younger and hence faster on their feet, the Dutch once again took the lead in the third quarter with Janssen completing his brace from a penalty corner.
Captain Felix Denayer had two hits at the Dutch goal in the 43rd minute in a wave of attacks but goalkeeper Pirmin Blaak blocked both of them.
It was end-to-end stuff for a while and Belgium equalised just when a few seconds were left in the third quarter, with Nicolas de Kerpel firing a field goal.
In a dramatic fourth quarter, Boon wasted a penalty stroke in the 50th minute with Blaak bending down to his right to block the shot.