Kawakami (3-5) had lost five of his last six decisions before outlasting Halladay, who leads the major leagues with eight wins.
"I'm not trying to think about the other pitcher too much but I did hear things about how he's on a roll right now," Kawakami said through an interpreter. "He's been pitching so well, it's a pleasure to pitch against him. Really."
Kawakami, a 33-year-old rookie, lasted eight innings -- his longest outing of the season -- and gave up only three hits with no walks and seven strikeouts.
Halladay gave up five hits with one walk and six strikeouts in seven scoreless innings, ending his streak of wins in five straight starts.
"When you run into a guy who's pitching well, it makes it tough," Halladay said. "We ran into one who was pitching well. You have to tip your hat to him."
Gonzalez escaped a jam in the ninth for his seventh save.
Aaron Hill hit a one-out double to left field and advanced to third on Alex Rios' weak grounder to Gonzalez. Vernon Wells followed with a grounder that a charging Martin Prado bobbled briefly at third base before recovering to throw to first.
"I was hoping he'd throw it away," Toronto manager Cito Gaston said.
Instead, Prado's accurate throw beat Wells by one-half step.
"I just reacted to the groundball," said Prado, the fill-in starter for Chipper Jones, who was held out with a sore toe.
"With that guy Vernon Wells running down the line, I didn't want to stay back. I knew he was going to run hard," he added. "I came in to get it and for some reason -- I was watching the runner -- the ball just bounced in front of me. I just reacted."
The Braves took advantage of Halladay's exit to score the game's only run and hand the Blue Jays their fourth straight loss for the first time since losing seven straight from June 14-21, 2008.
The Blue Jays scored a total of five runs in losing three straight at Boston before continuing their nine-game road trip in Atlanta.
"We couldn't score any runs," Gaston said. "We're having trouble scoring runs right now. (Kawakami) threw the ball well. You can't take anything away from him. They both pitched a very good game."
Diaz, pinch-hitting for Kawakami, led off the eighth with a double to center off Jesse Carlson (1-3) and moved to third on Yunel Escobar's groundout to first before scoring on Kotchman's fly to left field.
The Blue Jays, shut out for the first time this season, remain one-half game ahead of Boston in the AL East.
Kawakami, who had lost five of his last six decisions and entered the game with a 5.73 ERA, looked to be an unlikely bet to keep pace with Halladay, the 2003 Cy Young winner.
"He had a 6.00 ERA for so long; he's so much better than that," Braves manager Bobby Cox said. "He was popping the ball. He got his split-finger going. He was just dynamite."
Kawakami gave up only two hits before Scott Rolen led off the eighth with a double to left. Rolen was left standing at second as Lyle Overbay grounded out to Kawakami, Rod Barajas hit a fly to shallow right field, and pinch-hitter Joe Inglett struck out.
Inglett hit for Halladay, who left after throwing 95 pitches and said "it's definitely tough" to leave a 0-0 game.
Kawakami did not last more than six innings in any of his first seven starts, but he looked strong against the Blue Jays after limiting his pitch count early in the game.
There was a 30-minute rain delay before the start of the game.
- Braves INF Omar Infante had surgery Friday to have a plate placed in his left hand. A bone in the hand was broken when he was hit by a pitch from Colorado's Manny Corpas on Wednesday night.
- Toronto called up RHP Casey Janssen, INF Joe Inglett and LHP Ricky Romero from Triple-A Las Vegas. OF Travis Snider, LHP Brett Cecil and RHP Bobby Ray were optioned to Las Vegas.
- The Braves optioned RHP James Parr to Gwinnett and recalled RHP Manny Acosta.
- Francoeur stole second base in the seventh, his first steal since Sept. 14, 2007.