It was the Blue Jays' seventh consecutive win.
Zaun's walk-off homer, his third hit of the game, negated Tampa Bay's Dioner Navarro's RBI single, which had broken a 3-3 tie in the top of the inning.
Toronto's Lyle Overbay hit two solo homers among three hits and two RBI.
Alex Rios had one RBI and Joe Inglett added three hits for the Blue Jays, who maintained a mathematical chance to earn an American League wild card berth.
The winning pitcher was Brian Tallet (1-1).
Tampa Bay's Rocco Baldelli had hits, one a ninth inning two-run homer which created a 3-3 tie.
A run scored on Inglett's ninth-inning error.
Akinori Iwamura had three hits and Carlos Pena two for the Rays, who have split their last 10 games.
The losing pitcher was closer Troy Percival (2-1).