He nearly got his first no-hitter in the process.
|More on Orioles-Braves|
|More MLB coverage|
"A no-hitter would've been nice, but it gave the bullpen the night off," Hammel said. "I heard from them. Not one bullpen pitch thrown. That's huge because we've been taxing them pretty good."
There have already been five no-hitters in the majors this season, including three this month, and Hammel made a strong bid to add to the list. He struck out eight and walked two, throwing 65 of 102 pitches for strikes.
Brian Roberts drove in three runs for the Orioles, who have won six of seven.
Atlanta pitcher Brandon Beachy (5-5) left in the fourth inning with right elbow soreness. The major leagues' ERA leader allowed no hits and one run, struck out five and walked one.
The Braves have lost five of six.
Hammel (7-2) had been struggling on the road, entering with a 1-1 record and a 4.76 ERA in his previous three starts away from Camden Yards. But he settled down after walking Dan Uggla on four pitches to begin the second.
Hammel retired the next 17 batters he faced before walking Uggla again with two out in the seventh. Heyward followed with a clean single to left field, but Eric Hinske flied out to end the inning.
The Baltimore dugout started buzzing as Hammel ended the fifth with a no-hitter intact.
"A lot of guys get in a different mental frame, but you could tell that he didn't," Orioles manager Buck Showalter said. "I think everybody kind of knew what was going on. Guys were starting to scatter in the dugout, and I noticed guys standing in the same place, including me."
Acquired in the February trade that sent Jeremy Guthrie to Colorado, Hammel had pitched poorly against Atlanta before Saturday, going 0-3 with 9.00 ERA in five career starts overall and 0-2 with a 11.74 ERA in two starts at Turner Field.
"I had a terrible track record against the Braves," Hammel said. "These guys have given me nightmares, especially here at Turner Field. I'm very excited to get out of here with a win. They put a good team on the field every year."
After walking Chris Davis on six pitches with two outs in the fourth, Beachy stopped in front of the mound and signaled to catcher Brian McCann that he was injured. He walked off the field during a mound visit from manager Fredi Gonzalez.
Beachy, who made 40 of his 57 pitches for strikes, retired his first 11 batters. He now has a 2.00 ERA.
"We're going to get the MRI and hope for the best on the results," Beachy said. "It's really frustrating. I've had a lot of success when I've felt good this year. I feel like I'm in a position where I know more. I know what I'm trying to do and I'm doing it, when I physically can."
Baltimore went ahead 3-0 in the fifth when Roberts' single off Varvaro scored Steve Pearce from second.
Cristhian Martinez, the third Atlanta pitcher, worked a scoreless sixth before Roberts lined a two-run single to right.
Hammel, who took a no-hitter into the eighth inning April 8 before beating the Minnesota Twins 3-1, said his bullpen session gave him no idea he would one-hit the Braves.
"I actually had a terrible bullpen, believe it or not," he said. "I was kind of feeling my way through the first two innings and then obviously just carried it on and found a pretty good groove."
- It was Hammel's second career complete game and first since he pitched eight innings in the Rockies' 1-0 loss at the Los Angeles Dodgers on July 1, 2009.
- Bourn went 0 for 4 to snap a career-high 14-game hitting streak.
- Gonzalez said before the game that Chipper Jones, who was held out with a swollen left knee, will be in the lineup at 3B on Sunday.
- Gonzalez likely will use Jones as a designated hitter when Atlanta visits the New York Yankees and Boston Red Sox next week.
- Atlanta 1B Freddie Freeman was out of the lineup with a swollen knuckle on his left index finger.
- Showalter said RF Nick Markakis, who underwent right wrist surgery on June 1, will visit a doctor on Friday for a standard checkup. Markakis was initially expected to miss three to four weeks.
- Roberts is expected to get a standard day off Sunday with 2B Robert Andino starting in his place.