MIAMI -- Julio Teheran's low ERA rose a smidgen, which was OK because his modest batting average rose a lot.
The right-hander doubled to lead off the seventh, and the Braves went on to score twice in the inning to take the lead.
"I felt I had to start a rally, and just tried to put the ball in play," Teheran said. "I think that was the biggest play of the game."
The Braves trailed 2-0 in the sixth inning but rallied to break a four-game losing streak.
"I know we've been losing," Teheran (5-3) said. "It's nice to do my job and help the team."
Teheran allowed five hits and two runs, which raised his ERA to 1.83. He came into the game 2 for 25 this season and hiked his batting average to .143.
The right-hander improved to 4-0 in six career starts against the Marlins with an ERA of 2.50.
"He's a stud," teammate Chris Johnson said. "He earned this one. He had our backs, and we got him just enough."
Three relievers combined to complete a five-hitter. Craig Kimbrel, who took the loss Thursday at Boston, pitched a perfect ninth for his 14th save in 16 chances.
The Braves won for only the third time in their past 13 road games. They totaled just eight hits but had several lineouts.
"We hit the ball harder than any other game this year," manager Fredi Gonzalez said. "We were hitting rockets right at people all night long. The score wasn't indicative of how well we swung the bat."
Giancarlo Stanton hit his NL-leading 16th home run in the first inning to put the Marlins up 2-0, but Tom Koehler (4-5) couldn't hold the lead. He gave up three runs in seven innings and was annoyed to allow four walks.
"It's tough to win ballgames when you're giving a team extra opportunities," he said.
The Marlins lost for only the second time in their past 13 games against NL East teams.
Freddie Freeman went hitless and struck out three times. He is 0 for 28 with 12 strikeouts against Miami this year and is batting .347 against the rest of the majors.
With the Braves trailing 2-1 to start the seventh, Gonzalez said it was a no-brainer to let Teheran hit, in part because the team's bullpen was stretched thin.
Teheran rewarded the decision with an opposite-field double.
Jason Heyward followed with a run-scoring triple, and B.J. Upton's sacrifice fly drove in an unearned run to put the Braves ahead.
Johnson singled home Atlanta's first run in the sixth.
While the Braves liked the way Teheran hit, they were more impressed with the 23-year-old's pitching.
"The more he goes out there, the more impressed I get -- his demeanor and how he goes about his business," Gonzalez said. "You watch him grow up in front of your face."
Teheran's only glaring mistake was a hanging slider to Stanton, whose homer was a typical tape-measure job. It cleared the hedge beyond the 418-foot sign in center field, ending a streak of 15 consecutive scoreless innings for Teheran.
He started a new streak the next inning.
"He was throwing four or five different pitches and commanding them all," Miami's Ed Lucas said. "He does a really good job changing speeds, especially for somebody who is as young as he is. He's got a really good feel for pitching."
The Marlins, who began the night with the best home record in baseball, fell to 20-9 at Marlins Park.
Miami C Jarrod Saltalamacchia went 0 for 3 and is in a 1-for-18 slump. ... RHP Ervin Santana (4-2, 4.06) is scheduled to start Saturday for the Braves against Miami RHP Jacob Turner (1-2, 5.35).