Halladay pitched eight strong innings for his 12th win, leading the Blue Jays to a 5-2 victory over the Red Sox.
The Blue Jays took two of three in the series and have beaten first-place Boston eight times in 11 meetings this year.
Halladay (12-4) escaped jams in the fifth and sixth to hold the highest-scoring team in the major-leagues to one run and five hits. He walked two and struck out six in lowering his AL-leading ERA to 2.33. Halladay's 12 wins are one behind Chicago's Jon Garland and Florida's Dontrelle Willis for the major-league lead.
"That's why he's, if not the best, one of the best in the league," Francona said. "He's made a statement for the last few years."
Miguel Batista allowed an RBI single to John Olerud in the ninth and loaded the bases before retiring Mark Bellhorn on a popup. Scott Schoeneweis then relieved and got Johnny Damon on a popup to earn his first save since Aug. 30, 2002, for the Angels against Baltimore.
Damon extended his hitting streak to a career-best 19 games with a first-inning single.
Boston had runners on first and second with no outs in the fifth, and loaded them with no outs in the sixth, but failed to erase a 3-1 deficit.
"There were some tough innings, but against them you always know you'll grind it out," Halladay said.
The Red Sox finished a six-game homestand at 2-4.
"Roy Halladay, he's definitely a great pitcher," Damon said. "We had our opportunities. We just couldn't get the job done."
Halladay has worked at least six innings in all 18 starts. According to Elias Sports Bureau, the only other Blue Jays pitcher to start a year with a streak that long was Pat Hentgen's 20 in 1997.
"He's in an elite class," Toronto manager John Gibbons said. "That's why he is who he is. The (Curt) Schillings, the (Randy) Johnsons, they all do that."
The Blue Jays are 22-13 against the AL East this season.
Bronson Arroyo (6-5) took the loss, giving up three runs and eight hits in eight innings.
The Blue Jays jumped ahead 1-0 in the first on Aaron Hill's two-out RBI double after Frank Catalanotto walked and Shea Hillenbrand singled, but Boston tied it in the bottom half on David Ortiz's run-scoring single. Halladay retired Manny Ramirez and got Trot Nixon to bounce into a double play to escape further damage.
Halladay then retired his next nine hitters easily before Boston put runners on first and second with none out in the fifth. But Bill Mueller flied to center, Bellhorn struck out and Damon bounced back to the mound.
Johnson is 11-for-26 (.423) with 14 RBI against Boston this season.
- Damon's hitting streak is the longest by a Red Sox player since Todd Walker's 20 straight in 2003.
- Boston RHP Curt Schilling, on the 15-day disabled list with a right ankle bone bruise, is scheduled to make his second rehabilitation start Monday for Triple-A Pawtucket. Francona said Schilling will probably throw 85-95 pitches.
- Herb Reed and the New Platters sang the anthems before the game.
- Tennis player James Blake threw out the ceremonial first pitch.
- The Red Sox haven't played an extra-inning game in their first 80 this season, the longest streak by a major-league team to start a season.
- Bellhorn struck out three times.
- After the game, the Red Sox optioned INF Ramon Vazquez and LHP Abe Alvarez to Pawtucket and recalled LHP Lenny DiNardo and RHP Jeremi Gonzalez.