Duvall was called up to the majors on June 25, 2014. In his first MLB game, Duvall hit a home run off Cincinnati Reds pitcher Mike Leake, for whom he was later traded. He was sent back down to the Grizzlies on July 4 due to the return of Brandon Belt from the disabled list. When Belt was sent back to the DL due to lingering concussion symptoms, Duvall was called back up to the Giants to play first base, alongside Travis Ishikawa, Buster Posey, and Michael Morse. On September 28, Duvall homered off San Diego Padres pitcher Tim Stauffer for his first career pinch–hit home run. Over the course of 2014, Duvall played in 28 games with the Giants, finishing with a.192 batting average, three home runs, and five RBIs. The Giants earned a wild card spot with an 88–74 record and eventually won the 2014 World Series over the Kansas City Royals. Duvall, however, did not make any appearances in the postseason. He began 2015 with the Sacramento River Cats.
Cincinnati Reds
On July 30, 2015, Duvall and Keury Mella were traded to the Cincinnati Reds in exchange for Mike Leake. Following the trade, Duvall joined the Louisville Bats. On August 31, Duvall was recalled by the Reds to replace an injured Brennan Boesch. As a pinch-hitter, Duvall homered in his first at bat with the Reds. Splitting time between Louisville and Cincinnati, Duvall played in 27 games with the Reds. He posted a.219 batting average, five home runs, and nine RBIs for the Reds. In 2016, Duvall was included on the Reds' opening day roster. By June, he led the NL in slugging percentage and was tied for first in MLB in home runs. He was selected to the 2016 Major League Baseball All-Star Game as a reserve. Duvall was the first University of Louisville alumnus to become an MLB All-Star. He also participated in the 2016 MLB Home Run Derby, losing to 2015 derby champion Todd Frazier in the semifinals. In his first full season in the majors, Duvall played in 150 games and posted a.241 batting average, 33 home runs, and 103 RBI. On April 18, 2017, Duvall hit his first career grand slam off of Kevin Gausman as the Reds won 9–3 over the Baltimore Orioles. On July 14th, with the bases loaded, Duvall hit his first career walk-off in the 11th inning off of T. J. McFarland of the Diamondbacks to give Cincinnati a 4–3 victory. Duvall finished 2017 with a.249/.301/.480 slash lineto go along with 31 home runs and 99 runs batted in. On May 9, 2018, Duvall hit his first career walk-off home-run off A.J. Ramos against the New York Mets to give the Reds a 2-1 victory.
Atlanta Braves
On July 30, 2018, Duvall was traded to the Atlanta Braves in exchange for Lucas Sims, Matt Wisler, and Preston Tucker. Duvall struggled in 2018 with the Braves, batting.132 with no home runs or RBIs. In both Atlanta and Cincinnati, Duvall batted just.195 with 15 homers and 61 RBIs. In 2019, Duvall hit.267/.315/.567 with 10 home runs in 41 games for Atlanta.