A late Danny Cipriani penalty saw Bath draw 24-24 with Sale, after the visitors staged a second-half comeback.
Luke James scored for Sale, but Bath hit back through Sam Underhill and Tom de Glanville to take a 14-point lead.
Sale dominated after the break with Jean-Luc du Preez, Rohan Van Rensburg and Evan Ashman putting them ahead.
Cipriani's kick three minutes from time made the score all square, before Faf de Klerk missed an 83rd-minute penalty to win the match.
Bottom side Bath have been finally finding some form at this late point in the season, beating Newcastle and Bristol in their most recent two Premiership matches.
Yet the hosts gave away a penalty in the opening 60 seconds and were spared going down three points as Rob Du Preez's penalty hit the post. Nathan Hughes was then sent to the sin-bin for a high tackle and minutes later James gave Sale the lead under the posts.
When Hughes returned, he thought he'd scored himself only for the TMO to think otherwise because of a knock on.
Bath's misfortune turned quickly when Underhill - back in the starting 15 after featuring for England in the Six Nations - scored twice from close range to put them ahead.
With Ben Curry sent to the bin for Sale, Bath extended their advantage through De Glanville for a healthy 21-7 half-time lead.
Sale came out revived after the break. Lock Jean-Luc Du Preez drove over first, Van Rensburg followed in the corner and Ashman secured the bonus point and a three-point lead, as Bath saw little of the ball in the Sale half for most of the 40 minutes.
Cipriani's late penalty meant Bath drew level but it was agony for South African fly-half De Klerk who sent a kick wide, with the clock in red, that would have given his team the win.
Bath head coach Neal Hatley told BBC Radio Bristol:
"It's funny, the changing room feels like a loss. I think at 21-7 we had the chance probably five minutes after half-time, in some great unstructured play we get down that left edge and Sam he just knocks on in a pass.
"We go 28-7 then, I think it's a long way back for them.
"In the end, I just think the power told. The wind obviously was a big factor, but we didn't deal well enough with the power.
"With the players we've got missing, for that forward pack to muscle up the way that it did - Arthur Cordwell going 80 minutes - I'm immensely proud of what the boys did.
"But everyone is frustrated in there, we looked at that as an opportunity to win against a good side at home."
Sale director of rugby Pat Sanderson:
"Was a draw the fair result? It probably was, given how we performed in the first half.
"They looked dangerous in attack, put their bodies on the line. We looked a bit leaky and uncharacteristically soft.
"There was a general malaise and we lacked urgency in the first half. We addressed that at half-time and therein lies the difference.
"I'm really proud of that second half. It's good to get three points but there's two gone begging."
Bath: De Glanville, Butt, Joseph, Clark, Muir; Cipriani, Spencer (c); Cordwell, du Toit, Rae, Spencer, Richards, Bayliss, Underhill, Hughes
Replacements: Doughty, Vaughan, Rae, de Carpentier, Casson, Simpson, Bailey, Cokanasiga
Sin bin: Nathan Hughes (6)
Sale: James; Roebuck, James, Van Rensburg, Reed; Du Preez, R. De Klerk; Rodd, Ashman, Oosthuizen, JL. Du Preez, De Jager, Ross, Curry, D. Du Preez.
Replacements: Langdon, McIntyre, Jones, JP du Preez, Wiese, Warr, Curtis, Metcalf
Sin bin: B. Curry (34)
Referee: Hamish Smales (RFU).