"Someone will question why he deserves to be in the starting rotation still and he showed why," Arizona manager Kirk Gibson said. "I was questioned after his last outing, I was asked why and that's why."
Unlike his last start, in which he allowed six runs and eight hits in 2 1/3 innings, Collmenter (7-7) was in control nearly throughout this outing. And with the success, he felt comfortable throwing almost a dozen usually rare curveballs to the Astros' youthful lineup.
"A lot of the time they're looking fastball or changeup," said Collmenter, who allowed two runs, walked one and struck out five. "They're not looking for a curveball and it will surprise them."
Twice Collmenter buckled the knees of Houston hitters with 69 mph curveballs that started shoulder high out of the right-hander's over-the-top motion and dropped into the strike zone at the batters' thighs.
"With my delivery I'm able to take advantage of the full range of angles," Collmenter said.
Arizona won for the third time in four games and moved a half-game ahead of San Francisco in first place in the NL West. The Diamondbacks are on top of the division for the first time since June 24.
"You guys probably are (surprised) but we're not," Diamondbacks catcher Miguel Montero said. "We're not surprised at all. That's what you get when you play good baseball. When you're close to the race, you go out there and ride it every day."
David Hernandez pitched the ninth inning for his 10th save.
Astros starter Henry Sosa (0-1) gave up four runs and six hits in his major league debut. Sosa walked three, struck out four and hit a batter.
"He had to find some things in the first inning," Astros manager Brad Mills said. "I thought he made some real good adjustments and threw the ball really well after that. I like the way he was able to find himself and come back."
Bloomquist hit Sosa's fourth pitch into the bleachers in left field for his second career leadoff home run and Arizona's fourth this season. Ryan Roberts doubled to center, Montero walked with one out and Kelly Johnson walked with two outs before Goldschmidt singled to make it 3-0.
"The first inning I overthrew the ball a little bit," Sosa said. "I wasn't nervous, just happy. It is my first game in the big leagues. I just enjoyed the game."
Houston scored twice in the fifth on its only four hits against Collmenter. Brian Bogusevic singled, Jimmy Paredes doubled and Barmes lined an RBI single to right. Quintero followed with a single to center to make it 3-2, but Collmenter retired the final three batters to get out of trouble.
Upton doubled and scored and a double by Chris Young in the fifth put Arizona ahead 4-2. Roberts scored from third in the seventh when Barmes dropped reliever Sergio Escalona's throw to second base on a stolen base attempt by Upton.
"We have to keep going out and trying to play good baseball," Upton said.
J.B. Shuck came home on a grounder to short by Lee to pull Houston within 5-3. Parra tripled off the wall in center in the eighth for a 6-3 lead.
Escalona rushed his throw on Upton's seventh-inning stolen base in part because Barmes was late covering the bag. The Astros purchased Sosa's contract after Tuesday's game. Sosa was acquired by Houston from San Francisco on July 19 for IF Jeff Keppinger and had made only one career start higher than Double-A before Wednesday. Sosa became the fifth Astros pitcher and ninth Houston player to make his season debut this season. Houston RHP Brett Myers will enter Thursday's start against Arizona looking to end a career-long six-game losing streak spanning his past eight starts. Myers is 2-2 in 10 appearances and nine starts against Arizona but hasn't beaten the Diamondbacks since June 4, 2005. LHP Joe Saunders, Arizona's starter on Thursday, is 8-4 with a 2.76 ERA in his past 15 starts. Opponents have scored 17 of their 63 runs against Saunders in the first inning and are batting .344 in the opening frame.