Charlie Hodgson kicked six penalties to send Sale to the top of the Premiership and Wasps spinning to their first loss.
Sale 18 (12)
Pens: Hodgson (6)
Wasps 10 (3)
Con: van Gisbergen
Pen: van Gisbergen
In a contest dominated by forward play, the game was decided by Hodgson and his rival for the England kicking berth, Wasps full-back Mark van Gisbergen.
Van Gisbergen kept Wasps in the game with a first-half penalty before converting Josh Lewsey's 51st-minute try - the only one of the game.
But it was not enough to overturn Sale's 12-3 first-half lead.
Despite Hodgson's kicking, Sale's pack was the star attraction, with Andrew Sheridan, Jason White and Sebastien Chabal all putting in noteworthy performances.
The pace of the game never relented throughout, although gaps in either defence were at a premium.
Lewsey's try was the only real chance of the night. After Matt Dawson's break, he picked up from the breakdown, dummied a pass and sneaked through the narrowest of gaps to score.
That rare blip failed to rattle Sale's defence, which stayed firm.
Sale director of rugby Philippe Saint-Andre:
"It was a game for men and I am pleased because tactically, we followed the game plan we worked on all week.
"We played a very rushed defence and had a lot of go-forward. We put a lot of pressure on them.
"We made one mistake and they scored a try but we were completely in control of the game and it is a huge victory for us because Wasps are one of the best teams in Europe."
Wasps director of rugby Ian McGeechan:
"We can't give ball away like that and let a side like Sale play with easy ball.
"They executed the game the way they wanted to but they had a lot more ball then they anticipated because of our mistakes.
"It meant the game was played at the wrong end of the field and it was three-point territory for Sale. Six penalties says it all, doesn't it?"
Sale: Larrechea; Cueto, Taylor, Seveali'i, Robinson; Hodgson, Martens; Sheridan, Bruno, Stewart; Jones, Schofield; White, Lund, Chabal.
Replacements: Courrent for Martens (74), Titterrell for Bruno (60), Turner for Stewart (53), Lobbe for Schofield (57), Bonner-Evans for Chabal (80).
Not Used: Todd, Hanley.
Sin Bin: White (17).
Wasps: Van Gisbergen; Sackey, Lewsey, Abbott, Voyce; King, M. Dawson; Payne, Ibanez, J. Dawson; Shaw, R. Birkett; Worsley, O'Connor, Dallaglio.
Replacements: Brooks for King (77), Gotting for Ibanez (63), Bracken for J. Dawson (54), Hart for Worsley (24).
Not Used: Skivington, Reddan, Waters.
Sin Bin: Shaw (40).
Ref: Sean Davey (RFU).