OAKLAND -- Jesse Hahn was admittedly a little too excited in the first inning after coming off the disabled list earlier in the day, and it showed when he gave up back-to-back singles with one out.
Once he calmed down and got Toronto cleanup hitter Kendrys Morales to ground into a double play, the Oakland right-hander was as effective as he's been all season.
Hahn allowed an unearned run over six innings and the Athletics beat the Blue Jays 4-1 on Tuesday night.
"That first inning, my tempo and my rhythm was a little quick just because I was excited to be back out there," Hahn said. "So there's an adjustment you have to make to take a deep breath and get right back into your normal rhythm."
Khris Davis drove in two runs, Adam Rosales hit a tiebreaking single with two outs in the fifth and Jed Lowrie added two hits as the A's overcame their major league-leading 59th error to win for the third time in four games.
Activated before the game, Hahn (2-4) struck out two, walked one and pitched out of a bases-loaded jam in the fourth.
"For a guy coming back from a DL stint and a short rehab start, I thought he pitched really well," Oakland manager Bob Melvin said. "When he needed to get a ground ball, he got it. No bigger than the bases-loaded one because he gives up a hit there, now it's a whole different ballgame."
Santiago Casilla retired three batters for his 10th save.
Josh Donaldson had two hits against his former team and Troy Tulowitzki drove in Toronto's run with a single in the fourth after Jose Bautista reached on third baseman Ryon Healy's throwing error.
Blue Jays starter Marco Estrada (4-4) retired 12 straight before walking Stephen Vogt with one out in the fifth. After Vogt was thrown out at home trying to score from first on Mark Canha's double, Rosales singled just past a diving Tulowitzki at shortstop to break a 1-all tie.
"I was making pretty decent pitches early on," Estrada said after allowing four runs over 5 2/3 innings. "I got a little aggressive the last inning and I didn't make pitches."
Davis, the designated hitter after leaving Monday's game with a calf injury, had a sacrifice fly in the first and an RBI double in the sixth.
ENDING THE DROUGHT:
The Blue Jays snapped an 0-for-34 skid with runners in scoring position when Tulowitzki singled home Bautista. The streak was the second-longest in the majors this season. Kansas City had an 0-for-35 stretch in May.
The A's turned a pair of inning-ending double plays. Ryan Goins was thrown out at the plate by Oakland first baseman Yonder Alonso while trying to score from second on Donaldson's infield single in the third, then Kevin Pillar was cut down attempting to stretch a single in the fifth. "Hopefully, we can get on a roll and sustain a few games in a row where we don't have that kind of lurking on our shoulder," Melvin said about his team's defense.
Blue Jays: 2B Devon Travis was placed on the 10-day disabled list with a sore right knee. It's the same knee Travis had surgery on in the offseason.
Athletics: LHP Sean Doolittle made it through his rehab appearance with Class A Stockton fine and could be back with the big league club as soon as this weekend. The former closer will pitch an inning for Triple-A Nashville on Wednesday before a decision is made, but it's likely Doolittle will rejoin the A's on their upcoming six-game road trip. ... OF Matt Joyce (left quadriceps) was held out of the starting lineup.
Blue Jays: LHP Francisco Liriano (3-2) pitches the series finale Wednesday afternoon. Liriano is 2-2 in seven career appearances at Oakland.
Athletics: RHP Jharel Cotton (3-6) makes his first career start against Toronto while trying to win for the first time since being recalled from the minors on May 27. Cotton ranks second among AL rookies in strikeouts (44) and innings pitched (49 1/3).