Valdez retired the first 12 batters, with six strikeouts, before Oscar Gonzalez walked to open the fifth. But Valdez still faced the minimum in that inning thanks to a double play.
Valdez went on to retire the final nine batters of the game and finished with seven strikeouts. He threw 93 pitches, including 65 for strikes.
Kyle Tucker gave the Astros a 2-0 lead in the third inning with a two-run single.
Valdez joins Yankees right-hander Domingo German, who threw a perfect game against the Oakland A’s on June 28, and the Detroit Tigers, who had three pitchers combine for a no-hitter against the Toronto Blue Jays on July 8, to pull the feat this season.
For Valdez, the strong start comes after he allowed eight hits and six runs — both season highs — in 3 2/3 innings of a 13-5 loss to Texas in his last outing.
Valdez became the ace of Houston’s staff this season after Justin Verlander signed with the Mets. But Verlander was sent back to the Astros in a blockbuster trade-deadline deal Tuesday, giving Houston a powerful 1-2 punch.
Information from The Associated Press was used in this report.