Mikael Backlund, Dennis Wideman and Max Reinhart also scored for the Flames (16-21-4), who have won three of their last four on the heels of a fire sale of veteran players at the trade deadline. Calgary improved to just 5-13-2 on the road this season.
Lennart Petrell replied for the Oilers (16-18-7), who have lost five in a row on the heels of a five-game winning streak. The losing skid puts Edmonton's playoff hopes in serious jeopardy as it is six points back of eighth place in the Western Conference with just seven games remaining.
Calgary got on the board just 26 seconds in on the first shot of the game.
Edmonton did a bad job clearing the puck, allowing Backlund to get the puck and ring it off the post and in behind starting goalie Nikolai Khabibulin.
It appeared that Edmonton had taken the lead five minutes into the first period, but a video review determined that Nail Yakupov had directed the puck into the net with his skate.
Calgary went up 2-1 two minutes into the second period as Khabibulin was able to stop Tim Jackman in tight, but couldn't prevent Wideman from coming in as the trailer on the play and slamming home the rebound late on a power play.
The Flames made it 3-1 five minutes into the second period as Oiler veteran Ryan Smyth fell and coughed up the puck in the slot, allowing Baertschi to score his first of the season on a low shot.
Calgary put the game away midway through the third period after another giveaway by the Oilers in their own zone allowed Jiri Hudler to make a backhand pass out front to Reinhart, who picked the top corner to score his first career NHL goal.
MacDonald made 28 saves to record the win.
The Flames return home to face the Minnesota Wild on Monday. The Wild then travel to Edmonton to play the Oilers on Tuesday.
Notes: It was the fourth and final meeting between the two teams this season. The Flames won the first outing on Jan. 26, but the Edmonton Oilers swept a home-and-home series last week… Edmonton came into the game having won four of the past five meetings with Calgary in the Battle of Alberta after losing nine straight to the Flames. Calgary, though, had still won seven of its last 10 in Edmonton… The Oilers last won a season series over its provincial rival in the 2008-09 season… After defeating Calgary 8-2 in their last meeting, the Oilers lost four in a row while being outscored 13-3… Edmonton was without forward Ales Hemsky, who is expected to miss at least three games with a foot injury. Ryan Jones took his place in the lineup… Calgary was without a couple of its biggest offensive weapons as Curtis Glencross missed the game with an illness and Alex Tanguay was out with an MCL sprain that should keep him out for the remainder of the season… MacDonald made his first back-to-back start of the season for the Flames. Calgary came into the contest with three wins in its last 10 games. MacDonald was in net for all three… It was the 100th career NHL game for Edmonton's Ryan Nugent-Hopkins and the 600th for Calgary's Mike Cammalleri.