England were beaten 3-1 in Guimaraes despite having taken a first-half lead thanks to Marcus Rashford's penalty.
Netherlands improved after the break and equalised thanks to a towering header from Ajax captain Matthijs de Ligt.
Gareth Southgate's side thought they had won the game in the closing stages when Jesse Lingard converted Ross Barkley's pass, but a VAR check revealed that Lingard was narrowly offside and the goal was ruled out.
That meant the game went to extra time and the Netherlands ruthlessly capitalised on England's lapses in concentration to first take the lead and then seal the game.
First, John Stones gifted possession to Memphis Depay and although his shot was saved by goalkeeper Jordan Pickford, Netherlands substitute Quincy Promes was able to force the ball in via a deflection off Kyle Walker.
Then, in the second half of extra-time, Ross Barkley gifted the ball to Depay who set up Promes to fire home and secure a final berth against Portugal on Sunday.
Sterling captained England on his 50th international appearance with Harry Kane among the substitutues as he continues his comeback from an ankle injury.
The Manchester City forward accepted his side cost themselves a chance of reaching Sunday's showpiece.
"I thought we soaked up pressure well, towards the end of the second half we were the better team, but made silly mistakes and we got punished for it," Sterling said to Sky Sports.
"They got their pressing right on the night and we made two mistakes, we tried at times but it didn't work."
England have lost international semi-finals in successive years after falling at the same stage in Russia at the 2018 World Cup.
But Sterling feels the Three Lions can still take positives from their efforts despite another defeat in the last four.
"We still made progress to get to this stage," Sterling added. "It's about kicking on and trying to do the last bit."
Defeat for England means they take on Switzerland in the Nations League third-place play-off on Sunday afternoon.