Northampton fly-half Stephen Myler landed seven penalties against Sale to keep Saints' quest for a top two Premiership finish on track.
Myler had his first penalty cancelled out by Nick Macleod, then landed four unanswered kicks in the first half.
The two stand-offs exchanged kicks early in the second half before Mark Cueto's 50th-minute try.
Ryan Lamb's late drop-goal ensured Saints' win but Macleod's kick at the death gave the Sharks a bonus point.
The first half was dominated by defences but the hosts were more accurate with the boot and when Andrew Sheridan was sin-binned for killing the ball Myler landed his fourth goal for a 12-3 half-time lead.
After the break Macleod put Jonny Leota through a gap and Dwayne Peel came agonisingly close before Cueto went one better but his score out wide went unconverted.
Sheridan returned but Peel went off with a leg injury and skipper Sam Tuitupou saw yellow for a high tackle on Vasily Artemyev.
Myler made it 21-14 before leaving the field after a blow to the jaw and his replacement Lamb slotted a neat drop-goal to seal victory.
Sale won a penalty with the last kick of the game and Macleod was on song for a much-deserved point.
Jim Mallinder told BBC Radio Northampton:
"Workman-like is a good expression for it. We knew it was going to be tricky; the rain didn't help.
"We probably didn't respect the ball enough. But we worked hard for it.
"Stephen Myler was very good. On a day like this you need an accurate kicker; its very hard to play lots of rugby.
"We were all about winning today and that's what we did."
Sale head coach Tony Hanks:
"I am disappointed that we didn't come out of this game with a win. It is a very difficult place to come, for Northampton are a good side and a really good benchmark.
"Not many sides will come here and pick up a bonus point but I don't like losing and we are not one of those sides who come away and are happy just to lose with a bonus point picked up.
"We have no complaints about the yellow cards but the referee was inconsistent and we felt that yellow cards should have been awarded against them at certain stages."
Northampton: Diggin; Artemyev, Pisi, Downey, Cato; Myler, Roberts; Tonga'uiha, Haywood, Mujati; Manoa, Day; Lawes, Clark, Wilson.
Replacements: May for Cato (78), Lamb for Myler (73), Waller for Tonga'uiha (71), Long for Haywood (58), Doran-Jones for Mujati (61).
Sale: Miller; Brady, Leota, Tuitupou, Cueto; MacLeod, Peel; Sheridan, Jones, Buckley; Ostrikov, Gaskell; Vernon, Seymour, Powell.
Replacements: Addison for Cueto (65), Willis for Peel (51), Ward for Jones (51), Cobilas for Buckley (51), Easter for Seymour (73).
Sin Bin: Sheridan (40), Tuitupou (59).
Ref: Greg Garner (RFU).