Harlequins (3) 3
Bristol (12) 17
Tries: To'oala, Lemi, Arscott
Bristol ended Harlequins' chances of a Heineken Cup quarter-final place and kept their own alive with their first away win since January.
Bristol put in a dogged forward display in soggy conditions, taking 12-0 lead through tries from Alfie To'oala and David Lemi within the first 25 minutes.
Luke Arscott ran in another after the break, with Quins' sole score coming from a drop goal from Danny Care.
Referee Peter Allan twice spoke to the captains in an ill-tempered match.
Bristol hooker Mark Regan - back after ignoring his club's plea to rest last weekend rather than skipper the Barbarians - worked effectively against opposite number Gary Botha, who was making his Quins debut.
The two sides face each other again next weekend at the Memorial Ground.
Harlequins boss Dean Richards:
"It is probably the worst we've played in two-and-a-half years which is the most disappointing thing.
"If they had played badly and not realised it I'd have had licence to have a go at them but there's no point if they know.
"It's now about how we get them back on track, which is the most important thing."
Bristol director of rugby Richard Hill:
"It was a long time since we'd won away from home in any competition so it was a very big win for us here.
"We've got a very realistic chance of putting pressure on the top of the group now.
On Regan: "I could tell he was up for the game. He was pumped up and got the rest of our pack going. I'm convinced now that it's well behind him and his head's back on Bristol."
Harlequins: Mike Brown, Tom Williams, David Strettle, De Wet Barry, Ugo Monye, Adrian Jarvis, Danny Care, Ceri Jones, Gary Botha, Mike Ross, Ollie Kohn, Jim Evans, Chris Hala'ufia, Paul Volley (capt), Nick Easter.
Replacements: Tani Fuga, Ricky Nebbett, Nicolas Spanghero, Phil Davies, Will Skinner, Steve So'oialo, Tosh Masson.
Bristol: Luke Arscott; Lee Robinson, Rob Higgitt, Neil Brew, David Lemi; David Hill, Shaun Perry; Alex Clarke, Mark Regan, Jason Hobson; Roy Winters, Sean Hohneck; Matt Salter (capt), Alfie To'oala, Andrew Blowers.
Replacements: David Blaney, Darren Crompton, Gareth Llewellyn, Joe El Abd, Brian O'Riordan, Jason Strange, Sam Cox.