A try from Sale full-back Luke James three minutes from time proved decisive as leaders Bristol’s six-game winning run in the Gallagher Premiership came to an end with a 20-13 defeat.
A committed Sale side frustrated Bristol, who could not overcome the absence of attacking talents Semi Radradra, Luke Morahan and Harry Randall.
AJ MacGinty kicked five penalties to add to James’ try, while Bryan Byrne scored Bristol’s try with Ioan Lloyd adding two penalties and a conversion.
Before the match kicked off there was a minute’s silence for former Bristol, England and British Lions hooker John Pullin, who has died at the age of 79.
The opening 15 minutes were fiercely contested but scoreless as Bristol’s running game was met with robust defence from the visitors, who preferred the kicking option of scrum-half Faf De Klerk to make ground.
Sale then suffered a setback when their captain Jono Ross was yellow-carded for sacking a line-out and Bristol immediately capitalised to score the opening try from the next, with Byrne driving over.
Lloyd converted before MacGinty kicked two penalties in quick succession to put his side on the scoreboard.
Ross returned from the sin bin as Sale continued to frustrate their opponents, and after 33 minutes it was the visitors who took the lead when MacGinty fired over a penalty from halfway.
A minute before the interval, Bristol had the chance to regain the initiative but instead of taking a kickable penalty, they opted for the driving line-out but they could not make it count and Sale held on for a 9-7 interval lead.
Three minutes after the restart, Sale nearly extended that advantage when hooker Curtis Langdon burst away from a line-out on halfway.
He was tackled but the ball was recycled for De Klerk to run strongly before feeding Byron McGuigan, who was dragged down inches short by the combined efforts of Henry Purdy and Charles Piutau.
Sale lost the resulting five-metre scrum but they picked up the only score of the third quarter with a fourth penalty from MacGinty.
However, the home scrum continued to be stronger, winning a number of penalties, two of which Lloyd kicked to put his side in the box seat but Sale were not to be denied.
A strong run from replacement Sam Dugdale took Sharks into the opposition 22 before a well-judged pass from Will Cliff gave James an easy run-in.
MacGinty missed the conversion but succeeded with a last-minute penalty to seal victory.