Saracens beat Bath to return to the top of the Premiership as David Strettle scored on his 100th game for the club.
After George Ford's early penalty for Bath, Alex Goode kicked Sarries level before converting tries by wingers Chris Wyles and Strettle to carve out a 17-3 lead at the break at The Rec.
Goode's drop goal extended that lead until a late penalty try, converted by Ford, brought it back to 20-10.
But Goode's second penalty of the night closed out victory for Saracens.
Having started this battle of third v second a point behind morning leaders Northampton, Sarries are now three clear at the top. But the Saints would go back top again if they win at home to Gloucester on Saturday.
Bath had won 12 home matches and were unbeaten home or away in all competitions since the new year.
But Saracens, the last side to win a league match at The Rec (a similarly conclusive 22-0 victory in December 2012), maintained their hold over the home side to record a victory that all but ends Bath's ambitions of a top-two Premiership finish.
Flanker Jacques Burger was at his destructive best in the loose, until he was sin-binned for one illegal tackle too many, while Goode stepped up at short notice to control the game at fly-half after Charlie Hodgson pulled out during the warm-up, feeling unwell.
Goode landed two penalties, two conversions and a drop goal for a 13-point individual haul in a near faultless performance.
It was Goode who created an opening for Joel Tomkins and Duncan Taylor to set up the first try of the night for Wyles on the left on 31 minutes.
Bath's poise then again deserted them when they lost possession in the Saracens 22, Taylor hacked on, Ollie Devoto fumbled and Brad Barritt kicked across field for Strettle to mark his 100th appearance with a simple try, Goode again converting.
Bath brought on a specialist openside in Guy Mercer for Alafoti Fa'osiliva in an effort to even up the breakdown contest but then lost scrum-half Peter Stringer to an illegal tackle on Burger.
After Goode's drop goal extended Sarries' lead on 56 minutes, Burger then received the second yellow card of the night for a high tackle on Anthony Watson.
Bath so nearly took advantage of the extra man man when they battled their way over the line, yet without convincing the officials that Leroy Houston had managed to touch down. But, with Sarries still down to 14 men, the home scrum earned a 72nd minute penalty try, improved by Ford.
After another Goode penalty, Wyles became the second Saracens player given a yellow card for an illegal tackle when he barged replacement wing Semesa Rokoduguni into touch - but by then the game was up for Bath.
Bath head coach Mike Ford:
"Let's give credit to Saracens. They're a very good side. They're ahead of us in their development cycle. We've only been together since July with this new squad.
"Their experience told in certain places. They control the scoreboard and force you to do things you don't really want to do. And the second try just before half-time was a killer.
"We're going to hurt for three days but we'll come back again on Tuesday and start work again.
"We've got to get up to their level. I said to the team, we've come a long way this season but we've got to get better."
Saracens director of rugby Mark McCall:
"This week was a five-day turnaround and we only got Alex Goode back from England on Wednesday. He was getting ready to play full-back tonight and, with 30 seconds to go, he's asked to play fly-half.
"Charlie was feeling really dizzy and light-headed. It would have been wrong to expose him to a game like this. But Alex did an amazing job.
"He hasn't been at the club for four or five weeks, apart from a couple of days. To have to step in and play fly-half against a really good team in a big atmosphere, in a big game, and do what he did, was pretty special.
"We had to re-adjust a lot of people, but the team just rolled up their sleeves. It was a great performance.
"We are very satisfied. I thought the effort was extraordinary, the way they fought for each other. From minute one to minute 80 it was a brilliant team effort."
Bath: Abendanon; Watson, Devoto, Eastmond, Banahan; Ford, Stringer; James, Batty, Perenise; Day, Attwood; Fa'osiliva, Louw (capt), Houston.
Replacements: Guinazu, Catt, Orlandi, Caldwell, Mercer, Young Henson, Rokoduguni.
Saracens: Goode; Strettle, Tomkins, Barritt, Wyles; Hodgson, de Kock; Vunipola, Brits, Johnston; Borthwick (capt), Kruis; Wray, Burger, Joubert.
Replacements: George, Barrington, Stevens, Sheriff, Brown, Wigglesworth, Taylor, Bosch.
Sin Bin: Burger (67), Wyles (79).
Referee: Luke Pearce (RFU).