Wacha allowed one unearned run over seven innings as the Cardinals snapped a three-game losing streak to beat American League Central-leading Kansas City 6-1, ending a five-game winning run for the Royals.
The win sees St Louis go 3.5 games clear in the NL Central after the second-placed Chicago Cubs lost 4-3 to the Arizona Diamondbacks, who got a two-run homer from Paul Goldschmidt.
In the NL East, the Washington Nationals moved 2.5 games clear as Bryce Harper collected two RBIs in a 4-1 win over the Philadelphia Phillies and the New York Mets were hammered 9-1 by the Pittsburgh Pirates.
Francisco Liriano struck out 12 in six innings while Andrew McCutchen and Starling Marte each had home runs as Pittsburgh completed a three-game sweep.
Justin Upton’s first-inning grand slam set the San Diego Padres on their way to an 11-3 win over the Los Angeles Dodgers, who nevertheless remain two games clear in the NL West after the San Francisco Giants were beaten 11-2 by the Colorado Rockies.
Rookie Mike Foltynewicz held the Milwaukee Brewers to one run in 7 2/3 innings as the Atlanta Braves won 2-1.
In the American League, the Houston Astros moved 6.5 games clear in the West as they topped the Detroit Tigers 10-8 in a wild game, while the Los Angeles Angels lost 6-1 to the Boston Red Sox as Mike Napoli went deep again.
The Minnesota Twins capitalised on Kansas City’s loss to close to within three games in the AL Central with an 8-1 win over the Chicago White Sox, with Brian Dozier clubbing two home runs.
Boston’s win saw them gain further ground in the AL East as both the Tampa Bay Rays and New York Yankees lost again.
The division-leading Rays went down 7-2 to Oakland as Billy Burns, Mark Canha and Josh Reddick all hit homers, while the Yankees suffered a sixth-straight loss, beaten 5-2 by the streaking Texas Rangers.
That leaves Tampa Bay 1.5 games clear of the Yankees, with Boston now only one game further back.
Boston moved above Baltimore, now fourth but still only three games back on Tampa Bay, as the Orioles lost 5-2 to the Miami Marlins.
Home runs from Ryan Goins and Edwin Encarnacion powered the Toronto Blue Jays in an 8-2 win over the Seattle Mariners, while the Cleveland Indians beat the Cincinnati Reds 5-2 for their sixth straight win.