A first-half strike from on-loan Celtic striker Cillian Sheridan gave Saints victory.
Dejected Aberdeen saw their winless streak stretch to 10 games after Sheridan’s close-range 21st-minute finish edged a hard-fought contest at McDiarmid Park.
Newly-promoted Saints are now only three points behind sixth-placed Hearts and boast two games in hand on the Edinburgh side as they seek to finish in the top half for the first time since 2000.
Mark McGhee’s eight-placed Dons, meanwhile, face a growing fight to make the top six, trailing seven points behind Hearts as their season continues to falter.
Sheridan ultimately came back to haunt McGhee, with the Aberdeen manager having had the striker on loan at his previous club Motherwell for the second half of last season.
McGhee made two changes to the side that drew 1-1 at Hamilton last time out with Fraser Fyvie and Jerel Ifil coming in for Sone Aluko and Derek Young.
Home boss Derek McInnes was forced into two alterations to the team who triumphed at Falkirk on Saturday, as Stevie Milne and Murray Davidson were both ruled out and Kevin Moon and Sheridan started in their places.
The hosts threatened first when Gary Irvine’s lobbed cross from the right forced Jamie Langfield to tip over from under his own bar. Aberdeen should then really have taken the lead with their first attack after 14 minutes.
After a break from a St Johnstone free-kick, Steven MacLean fed Michael Paton who flicked the ball over last defender Chris Millar.
Paton sprinted clear on goal but dragged a foot wide of Graeme Smith’s left-hand post.
Aberdeen were soon made to rue the missed opening as Saints made the decisive 21st-minute breakthrough.
Liam Craig’s corner picked out Danny Grainger whose fierce volley could only be parried by Langfield and Sheridan prodded home from two yards for his third goal for Saints.
Just before the half-hour mark, the Perth outfit almost doubled their lead. Grainger’s inswinging corner allowed Dave Mackay a free header but Langfield made an excellent point-blank save with his left hand.
There was a blow for the Dons 10 minutes from the interval when Gary McDonald fell to the turf with nobody near him, prompting the arrival of Darren Mackie.
Saints were again next to threaten when Millar fed Sheridan on the right but the striker fired wildly wide with his left foot.
Aberdeen’s shaky defending was doing them no favours, allowing McInnes’ charges to grow in confidence.
Two minutes after the re-start, St Johnstone were offered a glorious chance for a second goal.
Irvine’s cross was missed by Craig and fell to Deuchar at the back post, but Langfield made a smart close-range save.
McGhee had seen enough and made his second substitution moments later, with Aluko replacing Jim Paterson.
Saints were next to suffer injury disruption when Kevin Moon was carried off after a tackle on Mark Kerr. Filipe Morais was his 57th-minute replacement.
Aberdeen were upping the tempo and had a penalty claim turned down by referee Charlie Richmond when Zander Diamond went down under a challenge from Deuchar.
On 65 minutes, Craig found himself in space from Jody Morris’ lofted cross but could only head at Langfield.
Sheridan had an even better opportunity as he raced onto Morais’ pass, held off Ricky Foster, but shot tamely into Langfield’s arms. At the other end, Diamond headed two yards past from Fyvie’s corner.
Michael Duberry then nodded over another centre from Grainger, before Kerr saw a long-range drive deflected past.
Aberdeen were exerting some late pressure and almost profited four minutes from time when Charlie Mulgrew’s shot spun off Duberry but MacLean was quickly shut out by the diving Smith.
Foster then blazed high and wide before the Dons pleaded for a penalty, more in desperation, after the ball struck Duberry with his arms down.
Aberdeen, who trooped off at the whistle, are now without a victory in all competitions since they triumphed at Hearts on January 27 and have taken just three league points from a possible 24.