ATLANTA -- Freddie Freeman isn't sure why Miami's pitching staff has been so hard for him to handle this year.
"It's just one of those things," he said. "I can't explain it, you guys can't explain it, nobody can explain it, but I was able to get a hit tonight."
The victory pulled Atlanta within one game of first-place Washington in the NL East.
Fourth-place Miami snapped a three-game winning streak to stay 8 1/2 games back.
Freeman, an All-Star first baseman, broke out of a slump in the season series against the Marlins, ending a 2 for 44 stretch by hitting his 14th homer as the Braves took a 5-0 lead in the four-run second inning.
His opposite-field homer landed in the seats in left-center, just how Freeman envisioned it during batting practice.
"I was able to carry it over into the game, and it was a nice feeling," Freeman said. "Hopefully I can keep going with that."
Santana (9-6) won for third time in four starts, giving up six hits and one run with three walks and 10 strikeouts in 7 1/3 innings.
He credited good command of his slider with setting an early tone.
"It was very good," Santana said. "I could throw it in any count for strikes. I was very comfortable in throwing that pitch today."
Santana registered double-digit strikeouts for the second time this year and the 13th time in his 10-year career when pinch-hitter Jordany Valdespin whiffed to begin the eighth.
But Santana walked Christian Yelich and gave up a single to Donovan Solano, leading manager Fredi Gonzalez to bring in Jordan Walden, who struck out Giancarlo Stanton and Casey McGehee to end the threat.
Nathan Eovaldi (5-6) failed to win for his fifth straight start after allowing six hits, five runs and two walks in seven innings. He struck out two.
Eovaldi began the night with a 4-0 record and a 2.21 ERA in eight starts against the NL East this year and was 2-0 with a 0.90 ERA in his last seven starts against Atlanta.
The Braves took a 1-0 lead in the first on Justin Upton's sacrifice fly RBI.
In the second, Atlanta went up 5-0 on Tommy La Stella's RBI single and Freeman's homer.
"He got that pitch," Eovaldi said of Freeman's long ball. "He's always a threat up there regardless of how he's been swinging. He's got the power and he just went down there and hit a good pitch."
Miami made it 5-1 in the third on Christian Yelich's RBI single.
Third baseman McGehee, however, missed tagging Heyward, who was called safe by third base umpire Alan Porter as he dove back to the bag.
Marlins manager Mike Redmond did not ask for the play to be reviewed, but he was ejected after arguing with Porter.
Heyward scored when the next batter, Gerald Laird, singled to make it 6-1.
Heyward went 2 for 4 to boost his average five points to .409 in 61 at-bats against Miami since last Aug. 3. ... The Marlins dropped to 64-112 at Atlanta, including a 15-27 mark since the start of 2010. ... RHP Anthony Varvaro was placed on the paternity leave list as the Braves recalled RHP Gus Schlosser from Triple-A Gwinnett. ... Atlanta LHP Chasen Shreve pitched the ninth for Atlanta and faced five batters. ... Marlins CF Marcell Ozuna struck out three times and has whiffed seven times in the first three games of the series.