|Bristol (9) 12|
|Pens: Henson 3 Drop-goal: Henson|
|Bath (3) 11|
|Tries: Rokoduguni Pens: Priestland 2|
Gavin Henson kicked all Bristol's points on his injury return as they beat rivals Bath for the first time in 11 years to boost their survival hopes.
The former Wales fly-half's long-range drop-goal was the highlight of an otherwise low-key first half.
Bath's Harry Davies and David Denton had tries disallowed before Semesa Rokoduguni intercepted to score.
But Rhys Priestland crucially missed the conversion and Bristol held on to move two points behind Worcester.
Mark Tainton's side remain bottom of the table despite the victory, which ended their seven-game losing streak, while Bath are in the final play-off spot just a point above fifth-placed Leicester.
Veteran Henson won 33 caps for Wales between 2001 and 2011 and got the better of the kicking battle with his opposing number 10 and countryman Priestland.
Bath's Davies and Denton were denied scores by last-gasp tackles from Will Hurrell and Alby Mathewson respectively, on both occasions their feet ending up in touch.
The Premiership's record try-scorer Tom Varndell was forced off against his wishes after failing a head injury assessment but, in front of their biggest crowd of the season, they stood firm to defeat Bath for the first time since December 2006.
Todd Blackadder's side have now lost their last four away games in the league.
Bristol interim head coach Mark Tainton:
"Our defensive effort was massive and to beat our neighbours was fantastic as we stood up to them but the fight against relegation will go all the way to the end.
"Gavin will be sore after his comeback but he controlled the game as he was accurate with both his place kicking and line-kicking.
"He's a confidence player and grew into the game. He's a big man so he threatens the defence before releasing good off-loads and pop-up passes."
Bath director of rugby Todd Blackadder:
"We beat ourselves as we didn't hold on to the ball enough and had plenty of opportunities to win.
"The breakdown was messy where they did a good job at slowing us down, but there are no excuses as Bristol showed real tenacity and never stopped believing."
Bristol: Woodward; Lemi, Hurrell, Piutau, Varndell; Henson, Mathewson; Bevington, Jones, Perenise, Tuohy, Evans, Eadie, Lam, Crane.
Replacements: Crumpton, O'Connell, Ford-Robinson, Jeffries, Fenton-Wells, Williams, Pisi, Wallace.
Bath: Homer; Rokoduguni, Joseph, Tapuai, Davies; Priestland, Cook; Obano, Batty, Lahiff, Stooke, Ewels, Ellis, Denton, Grant.
Replacements: Van Vuuren, Marfo, Palma-Newport, Douglas, Mercer, Homer, Hastings, Clark.
Referee: Greg Garner.
For the latest rugby union news follow @bbcrugbyunion on Twitter.