Andy Goode scored a try and kicked 13 points as Worcester extended Sale's winless start to the Premiership.
Mark Cueto scored the game's first try as Sale dominated the opening 25 minutes, before Worcester were inspired by David Lemi's score.
His fine individual try helped Warriors to an eight-point half-time lead but Nick MacLeod's try brought Sale level.
Goode took his personal tally to 18 points, including a second-half try, to help the hosts to their second victory.
Warriors move up to eighth in the table, while Sale remain bottom with seven defeats from seven matches, but are now seven points behind 11th-placed London Irish after picking up a losing bonus point.
The match was a personal milestone for Worcester lock forward Craig Gillies who made his 127th Premiership start - a new record for the Warriors.
Worcester were on the board within the first minute thanks to Goode's touchline penalty, before Sale's first points came courtesy of a try in the corner five minutes later.
Neat play on the right-hand side then aw Cueto go over but Danny Cipriani missed the conversion.
Goode's second penalty put Warriors ahead by a point, before Cipriani's first successful kick gave the visitors a two-point advantage.
The highlight of the first half was Lemi's try eight minutes before the break, the Samoa international dancing past five challenges over 30 metres for a fine individual score.
Goode kicked the conversion, then adding a penalty to give Worcester a 16-8 lead at half-time.
Cipriani's penalty closed the gap to five points five minutes after the break and it began another period of Sharks pressure.
Sale's second try arrived when Worcester lost possession at the maul, MacLeod stealing the ball to run over the line unchallenged and bring the visitors level, although Cipriani missed the conversion chance.
Worcester responded immediately, Goode going over after exchanging passes with Paul Hodgson, before adding the conversion, but he then hit the post with a penalty attempt moments later.
Sale had late pressure in injury time but Will Addison was denied by a superb try-saving tackle from Worcester scrum-half Hodgson.
Both players required lengthy treatment after the final whistle, Addison limping away before a similarly groggy Hodgson also eventually returned to his feet.
VIEW FROM THE DRESSING ROOM
Worcester coach Richard Hill:
"We looked rusty. We have not really been tested in the Amlin Challenge Cup over the past two weeks, whereas Sale were a bit more battle-hardened, having come off Heineken Cup games against Cardiff Blues and Montpellier.
"We played a lot of rugby in our own half and caused quite a few problems for ourselves.
"We weren't at our best by any means, but we just had enough to repel Sale at the end."
Sale rugby director Bryan Redpath:
"I am bitterly disappointed. We had enough territory and possession to have won the game, but the facts are that we didn't. I thought it was a game we should have won.
"Ross Harrison and Tommy Taylor were outstanding for a 19 and 20-year-old in the front-row. I thought they were our two best players, and credit to them.
"I think a lot of the older players should have a look at how those two youngsters performed in a game where it was all about a bit of guts."
Worcester: Pennell; Claassens, Grove, Matavesi, Lemi; Goode, Hodgson; Mullan, Lutui, Andress, Percival, Gillies, Betty, Kvesic, Tualava.
Replacements: Schofield for Gillies (55), Shervington for Lutui (60), Chris Jones for Taulava (61), Carlisle for Matavesi (65), Currie for Andress (73), Fatiaki for Lemi (78).
Not Used: Ceri Jones, Arr.
Sale: Macleod; Brady, Leota, Tuitupou, Cueto; Cipriani, Willis; Harrison, Taylor, Buckley; Myall, McKenzie; Vernon, Seymour (capt), Powell.
Replacements: Roberts for Buckley (57), Gaskell for Myall (57), Miller for Cipriani (66).
Not Used: Ward, Cobilas, Easter, Fowles, Addison.
Referee: Greg Garner (RFU).