Andrew Fenby scored either side of the break as London Irish gave James O'Connor, Marland Yarde and Ian Gough a winning send-off against Sale Sharks.
Mark Easter and Tom Arscott grabbed tries for the Sharks either side of Fenby's first-half effort.
Joe Ford's second penalty early in the second half put the Sharks 20-10 up.
Yarde then crossed, with O'Connor converting, before Fenby's second try edged the Exiles ahead for the first time with 18 minutes remaining.
Australia international O'Connor, making his last appearance for Irish before joining French Top 14 club Toulon, kicked seven of the Exiles' points, but failed to find the mark with two late penalties in a tense finish.
For Sale, Henry Thomas and James Gaskell were in the starting line-up for the final time before departing for Bath and Wasps respectively.
The Sharks, who finished the campaign sixth in the table, started strongly with a succession of penalties. That set them up for a driving line-out that allowed Easter to crash over.
However, Ofisa Treviranus' powerful run soon after opened the Sale defence up before O'Connor dished the ball to Fenby, who brushed off a weak Arscott tackle to touch down.
O'Conner added the extras but failed to tee up a penalty for the lead.
The Exiles allowed Sale ahead again by gifting them possession, Will Cliff making the break to send Jonny Leota clear before linking up with Arscott to score.
Ford converted before exchanging penalties with O'Connor as Sale led 17-10 at the break.
After fly-half Ford extended the Sharks' advantage with their only points of the second half, O'Connor combined with Yarde to spark the fightback.
While the Australian reduced the margin to three points with a touch-line conversion, Sale went on to turn down kickable penalties in favour of more attacking options.
It proved costly as Treviranus burst away for the hosts, getting Yarde involved in a movement which ended with Fenby speeding over the line.
Replacement Nick Macleod then missed a great penalty chance to put the Sharks ahead late on, and despite O'Connor missing two penalties of his own, Irish held on.
London Irish director of rugby Brian Smith:
"We found a way to win but our performance was ropey and scratchy.
"We could have made it more comfortable than it was had we kicked our goals and not missed our line kicks.
"It's disappointing to finish only 10th, we had an opportunity to kick on and challenge for Europe.
"I thought we might after we won away at Saracens and Wasps, but we failed to do so."
Sale director of rugby Steve Diamond:
"We want to win every game and, being 10 points up with wind advantage in the second half, we should have won.
"We should have kicked the points on offer and it would have been nice to finish with a win.
"It was difficult to motivate us for this game when we have already qualified for Europe.
"O'Connor was on fire every time he touched the ball and was the difference between the two sides."
London Irish: Homer; Yarde; Mulchrone, O'Connor, Fenby; Geraghty (capt), O'Leary; Parr, Mayhew, Halavatau; Gough, Rouse; Sinclair, Cowan, Treviranus.
Replacements: Smallbone for Parr (55), Stevens for Mayhew (41), Hagan for Halavatau (52), Low for Gough (41), Ellis for Sinclair (72). Not Used: Lewington, Dorrian, Hoadley.
Sale Sharks: Arscott; Brady, Leota, Tuitupou, Ingall; Ford, Cliff; Harrison, Taylor, Thomas; Ostrikov, Paterson; Easter, Seymour, Gaskell.
Replacements: Jennings for Tuitupou (47), MacLeod for Ford (59), Fowles for Cliff (72), Lewis-Roberts for Harrison (59), Jones for Taylor (59), Cobilas for Thomas (47), Kulemin for Ostrikov (64), Fihaki for Easter (64).
Referee: Greg MacDonald.