Buehrle (6-7), the author of two no-hitters and one perfect game in his 14-year career, walked two and struck out nine to emphatically snap Toronto's seven-game losing streak.
He gave up a two-out single to Justin Maxwell in the fifth and a one-out double to J.D. Martinez in the seventh. Buehrle walked two and hit a batter, but the last eight Astros went down in order.
Buehrle has thrown 29 complete games in his career and nine shutouts. This was his first shutout, however, since the perfect game he produced against Tampa Bay on July 23, 2009 while with the Chicago White Sox.
The loss went to Erik Bedard (3-8), who in his previous outing was taken out of a game against Seattle with a no-hitter working through 6 1/3 innings. He had piled up more than 100 pitches when he was lifted.
Bedard gave up a run on three hits in five innings against the Blue Jays. Houston has lost 11 of its last 13.