|Gloucester (10) 15|
|Tries: Visagie, Banahan Cons: Twelevetrees Pens: Twelevetrees|
|Sale (17) 30|
|Tries: Ashton, De Klerk, Webber, Solomona Cons: R du Preez 2 Pens: R du Preez 2|
Sale upset high-flying Gloucester with a bonus-point win at Kingsholm.
A Billy Twelvetrees penalty and a try from Jaco Visagie put Gloucester 10 points up after 15 minutes.
Sale responded with well-worked tries from Chris Ashton and Faf de Klerk, along with a Rob du Preez penalty, to lead by seven points at half-time.
Sale took control after the break with another Du Preez penalty and tries from Rob Webber and Denny Solomona before Matt Banahan went over for Gloucester.
The win sees Sale - who have now lost just once in their past seven Premiership games - move up to fifth in the Premiership, seven points off third-placed Gloucester and one off fourth-placed Northampton.
Visagie walked in after a big overlap on the right as Gloucester got off to a good start, but Sale grew into the game with two wonderful flowing tries as Ashton and De Klerk went over in the space of 10 minutes before Du Preez added a late first-half penalty.
Steve Diamond's Sharks suffered a blow soon after the restart when De Klerk was sin-binned for a deliberate knock-on, but the visitors were only short-handed for three minutes as Lewis Ludlow was yellow-carded himself for playing the ball on the ground with Sale close to the home side's line.
Du Preez kicked the resulting penalty before Webber was driven over from close range and winger Solomona ended a good passing move after another period of sustained pressure inside the home 22.
Banahan was driven over following a rolling Cherry and White maul with eight minutes left and, while Sale had a late try by Luke James disallowed for a forward pass after a video replay, they eased to a deserved victory.
Sale director of rugby Steve Diamond:
"It's great that the league is so competitive and the owners have done a great job in making it so.
"In a number of previous years one of the clubs has been obliterated by Christmas but that's not the case this season and I think it's great sport.
"Our game-plan was to stop them playing and we managed to. We took our opportunities but still left a couple of them out there.
"I was pleased with our performance against Bristol last week but even then we blew a few chances."
Gloucester head coach Johan Ackermann:
"A lot of things went wrong as our line-out work was scrappy and we missed opportunities resulting from that as our passing was inaccurate, going low and behind.
"Apart from the first quarter of an hour, they were more hungry and more desperate than us - and there are no weak teams in this competition.
"It's disappointing to lose at home as we wanted to end 2018 in style and we have to apologise to our supporters for that performance.
"We let ourselves down as we need to be on top of our game each week and we need to come back to our standards next week."
Gloucester: Hudson; Sharples, Trinder, Twelvetrees, Banahan; Williams, Heinz (capt); Hohneck, Visagie, Balmain, Slater, Mostert, Ludlow, Kriel, Morgan.
Replacements: Walker, McAllister, Dreyer, Savage, Evans, Clarke, Braley, Purdy.
Sale Sharks: Ashton; Solomona, S James, O'Connor, McGuigan; R Du Preez, De Klerk; Harrison, Webber, John, Beaumont, Phillips, Ross (capt) T Curry, J-L Du Preez.
Replacements: Langdon, Bristow, Jones, Evans, Strauss, B Curry, Cliff, L James.
Referee: Christophe Ridley (RFU).
For the latest rugby union news follow @bbcrugbyunion on Twitter.