Johnson and Halladay met on May 29 in Miami, when the Phillies ace threw the 20th perfect game in major-league history in a 1-0 win.
This time, Johnson (7-2) gave up three hits, walked one and struck out five as the Marlins ended a four-game losing streak.
Halladay (8-4) allowed one run and six hits in eight innings. He fanned eight and walked one.
Braves 11, Diamondbacks 7
Brooks Conrad scrambled home to break a ninth-inning tie and visiting Atlanta won after blowing a five-run lead. The speedy Conrad hit for David Ross, who had a double, single and two RBIs. Conrad singled, stole second and made a headfirst slide to score on pinch hitter Brian McCann's one-out single off closer Chad Qualls (1-3).
Reds 7, Giants 6
Brandon Phillips had four hits, including a two-run triple in the eighth inning that rallied host Cincinnati. Reds rookie Mike Leake had his roughest start to date, giving up a career-high 11 hits and five runs in 41/3 innings.
Astros 5, Rockies 4
Roy Oswalt struck out nine, Humberto Quintero homered and visiting Houston won its third straight. Oswalt (4-8) is 8-2 in his career against Colorado, including a one-hitter at Coors Field on Sept. 6, 2008.
White Sox 3, Tigers 0
John Danks (5-5) pitched seven innings of one-hit ball and Omar Vizquel homered and had a suicide-squeeze bunt for host Chicago. The White Sox have won two straight games - just their fourth winning streak of any kind this season.
Blue Jays 3, Rays 2
Morales out for season
The Angels' Kendry Morales will miss the rest of the season after surgery on his broken left leg. Morales was injured leaping onto home plate following his game-ending grand slam against Seattle on May 29 . . . The Nationals said they are donating to Cooperstown a Stephen Strasburg hat and a ball from his 14-strikeout debut this week. - AP