Miller (7-3) allowed two runs and six hits. He struck out nine and walked none.
Kennedy (3-4) was tagged for 10 runs and 13 hits in four innings.
Arizona scored three times in the ninth, and Edward Mujica got two outs for his 18th save in 18 chances.
The Cardinals hit five homers in a game for the first time since last July 27. The previous time they did it at home was June 24, 2005, at the former Busch Stadium.
David Freese extended his career-best hitting streak to 16 games for St. Louis. Descalso scored twice in the big fourth and finished with three hits, including a double.
The first five batters in the St. Louis starting lineup all got two hits, as did Miller.
Kennedy nearly escaped the fourth with giving up just one run, but his throw off on Yadier Molina's comebacker pulled shortstop Didi Gregorius wide of second base. What could have been an inning-ending double play instead led to Adams' three-run homer and Descalso's two-run shot.
The Cardinals greeted reliever Matt Reynolds with back-to-back home runs in the fifth from Miller and Carpenter for a 12-2 lead.
Gerardo Parra had three hits, including an RBI single in a three-run seventh for Arizona. The Diamondbacks scored three more in the ninth when rookie Keith Butler gave up a hit to Cliff Pennington and a double to Wil Nieves before walking three consecutive batters.
NOTES: The Cardinals have gone 9-0-3 in their past 12 series. ... Goldschmidt has an RBI in six consecutive games. ... Carpenter extended his career-best hitting streak to 15 games. Allen Craig has a 10-game streak. ... Miller was 2 for 25 at the plate entering the game. He singled in the second for his first hit of the season. ... Cardinals LHP Kevin Siegrist came in the seventh to make his major league debut after being recalled from Triple-A Memphis earlier Thursday. He struck out four in 1 2-3 innings, allowing one hit.
Link to box score: St. Louis 12, Arizona 8
Link to game discussion at The Cardinal Nation message board