Northampton beat the Scarlets at Franklin's Gardens to set up an LV Cup final meeting with East Midlands rivals Leicester next Sunday at Worcester.
The Saints had the stronger pack and scored the only two tries of the game through Alex Waller and Scott Armstrong.
Stephen Myler also kicked 14 points to see the English side through.
Scarlets showed good creativity but could only manage four penalties from fly-half Stephen Jones.
The Welsh side nearly took the lead after only eight minutes, winning a line-out in the Northampton 22 that sent Gareth Maule over the gain line.
Dominic Day took it on and surged over the try line, only for the TMO to rule no score as the second row had been held up by some desperate home defence.
Scarlets declined to take a kickable penalty in favour of more attacking options and they almost earned their reward when Andy Fenby stormed clear, only to be hauled down 10 metres short by an excellent cover tackle.
Instead it was Northampton who took a 15th-minute lead when Waller was driven over from a lineout 10m out.
Myler converted that and the outside-half then added a penalty.
Scarlets collected their first points when Jones kicked a 45m penalty after the Saints infringed at the lineout, but this was nullified with a second successful penalty from Myler.
Straight from the restart, Northampton foolishly gave away a penalty and Jones made no mistake with his kick to leave his side 13-6 behind at the interval.
Within three minutes of the restart Jones had further reduced the arrears with his third penalty, this time a kick from 40m, but Northampton soon responded with an excellent try.
The Saints produced their best passage of play, pressurising the Scarlets' defence in their own 22.
There were key drives from James Craig and Waller before a missed tackle on George Pisi allowed the centre to send Armstrong in at the corner for the try, which Myler was unable to convert.
Back came Scarlets and a further Jones penalty made it 18-12 to the hosts with half an hour remaining, but two well-struck penalties from Myler gave the Saints a healthy 12-point advantage.
Scarlets continued to give away too many needless penalties which prevented them building up any real momentum.
Saints replacement Ryan Lamb hit a post with a long-distance penalty but then succeeded with another after Day was sin-binned for offside, to give the Saints an ultimately comfortable victory.
VIEWS FROM THE DRESSING ROOM
Northampton Saints director of rugby Jim Mallinder tells BBC Radio Northampton:
"Reaching a final feels good. It probably wasn't the prettiest win, we didn't score lots of tries - but we won.
"Our forwards really took a grip of the game, particularly after the first 20 minutes, and we took our opportunities with Stephen Myler and Ryan Lamb kicking the goals.
"When you've got some of the younger lads playing as well, people like James Craig and Alex Waller, that's really encouraging.
"It makes the final (against Leicester) quite exciting. Hopefully it'll be packed out and I'm looking forward to it already."
Northampton: Paul Diggin; Vasily Artemyev, George Pisi, Tom May, Scott Armstrong; Stephen Myler, Martin Roberts; Alex Waller; Andy Long, Paul Doran Jones, James Craig, Christian Day, Calum Clark (capt), Roger Wilson, Tom Wood.
Replacements: Ross McMillan, Soane Tonga'uiha, Tom Mercey, Mark Sorenson, Ben Nutley, Ryan Glynn, Ryan Lamb, James Downey.
Scarlets: Dan Newton; Liam Williams, Gareth Maule (capt), Adam Warren, Andy Fenby; Stephen Jones, Liam Davies; Rhodri Jones, Emyr Phillips, Deacon Manu, Lou Reed, Dominic Day, Aaron Shingler, Kieran Murphy, Josh Turnbull.
Replacements: Kirby Myhill, Phil John, Peter Edwards, Sione Timani, Matt Gilbert, Gareth Davies, Nick Reynolds, Iongi Viliame.