The Rays completed a three-game sweep of the Blue Jays, who have lost 11 of their past 15 games at Tropicana Field.
Mallex Smith doubled with one out in the bottom of the ninth against Ryan Tepera (3-2) and moved to third on a groundout to shortstop by Wilson Ramos. Duffy won the game with his single to left field.
Diego Castillo (1-0) allowed one hit in two innings to earn the victory, the first of his career.
Rays right-hander Wilmer Font opened the game and allowed no runs despite giving up two hits and three walks in 3 1/3 innings. He struck out one.
Toronto left-hander J.A. Happ allowed no runs, one hit and three walks while striking out four in five innings.
Matt Andriese replaced Font in the fourth inning after a one-out walk to Russell Martin. A wild pitch put Martin at second, and Andriese pitched around a walk to Aledmys Diaz to finish the inning.
Andriese survived two singles in the fifth inning and followed it with a perfect sixth and seventh.
Happ was able to work around two walks in the bottom of the fifth and was replaced for the sixth inning by right-hander Seunghwan Oh, who pitched around a hit batsman.
Danny Barnes took over for Toronto in the bottom of the seventh and allowed a one-out double to Smith, the second hit of the game for the Rays. Pinch hitter Ramos flied out to center field, and Matt Duffy grounded out to first.
Castillo pitched around a single in the top of the eighth.
Left-hander Aaron Loup allowed a leadoff single to Jake Bauers in the bottom of the eighth and was replaced by Tepera. Bauers took second on a groundout to shortstop by Willy Adames. C.J. Cron walked, Joey Wendle struck out and Carlos Gomez ended the inning by forcing Cron at second on a grounder to third.
Castillo pitched a perfect ninth that ended when left fielder Johnny Field made a good catch at the wall to retire Diaz.
--Field Level Media