PHOENIX — Just below a sign that said "We Believe," a speaker blared Journey's "Don't Stop Believin'" across Arizona's clubhouse.

PHOENIX — Just below a sign that said "We Believe," a speaker blared Journey's "Don't Stop Believin'" across Arizona's clubhouse.

A setup? Possibly.

Either way, there's not much doubt in these Diamondbacks.

Ian Kennedy pitched eight dominant innings to become the NL's first 20-game winner, Justin Upton hit a broken-bat homer and Arizona moved a step closer to its first NL West title in four years with a 1-0 victory over the Pittsburgh Pirates on Monday night.

"This is the most important part, which is winning games, taking away that magic number and clinching here pretty soon," said Kennedy, who joined Detroit's Justin Verlander as the only 20-game winners in the majors.

Their lead quickly dwindling over surging San Francisco, the Diamondbacks needed a boost to start a nine-game, season-ending homestand.

They certainly got it from Kennedy.

The built-like-a-boulder right-hander had the Pirates guessing all night, giving up one hit — to the opposing pitcher, no less — while matching his career high with 12 strikeouts to become the fourth Diamondbacks pitcher to reach 20 wins.

Upton provided an improbable shot, leading off the sixth inning with his 31st homer off Jeff Karstens (9-9), a drive to left that snapped off his bat and was later upheld by a video review.

J.J. Putz closed out the two-hitter with his 42nd save — and 21st straight — by stranding Alex Presley at third to drop Arizona's magic number to four over the idle Giants.

Cardinals 4, Phillies 3

At Philadelphia, Kyle Lohse outpitched Roy Halladay, and St. Louis held off Philadelphia to gain ground on Atlanta in the NL wild-card chase.

Lance Berkman homered and had an RBI single for the surging Cardinals, who moved within 21/2; games of the wild card-leading Braves. Atlanta lost at Florida.

St. Louis, which took three of four in the series, has won 10 of 12 overall.

Despite the loss, the NL East champion Phillies clinched home-field advantage throughout the postseason when Milwaukee lost to the Chicago Cubs.

Marlins 6, Braves 5

At Miami, the sliding Atlanta Braves stumbled again, losing to Florida on Omar Infante's two-run homer off Craig Kimbrel with two outs in the bottom of the ninth inning.

Atlanta has dropped three of four.

Kimbrel came in with a 5-4 lead and retired the first two batters he faced in the ninth. But Emilio Bonifacio then hit a chopper to third baseman Chipper Jones, who could not come up with the infield hit.

Cubs 5, Brewers 2

At Chicago, Geovany Soto hit a pair of two-run homers and drove in all of Chicago's runs in a victory over Milwaukee.

The loss and St. Louis' win over Philadelphia kept the Brewers' magic number at four for clinching the NL Central. They are looking for their first division title in 29 years.

The Cubs snapped a six-game losing streak to the Brewers.

All three of Soto's two-homer games have come against Milwaukee. He hit one off starter Chris Narveson (10-8) in the third and the second against reliever Marco Estrada in the sixth.

Astros 3, Reds 2

At Cincinnati, Matt Downs hit a tiebreaking homer in the eighth inning and Houston beat slumping Cincinnati.

Downs greeted Nick Masset (3-6) with a leadoff drive to left, sending the Astros to their second straight win after a three-game skid. Six Houston pitchers combined for a four-hitter.

Brandon Phillips hit a leadoff homer in the first for Cincinnati, which has lost four straight.

Padres 8, Rockies 2

At Denver, Cory Luebke took a no-hitter into the sixth inning and San Diego got homers from Cameron Maybin and Aaron Cunningham to beat slumping Colorado.

Mark Ellis homered for Colorado's only hit. The Rockies have lost five straight and six of seven.

Colorado shortstop Troy Tulowitzki (left hip), first baseman Todd Helton (back) and outfielder Carlos Gonzalez (right wrist) were out of the lineup.

Blue Jays 3, Angels 2

At Toronto, Adam Lind drove in the winning run with a grounder in the 10th inning and the Blue Jays beat the Angels before a tiny crowd in Toronto.

Torii Hunter and Mark Trumbo homered for the Angels but Los Angeles lost for the third time in four games, further denting its chances of reaching the playoffs. The Angels trail first-place Texas by five games in the AL West and are behind both Boston and Tampa Bay in the wild-card race.

The crowd of 11,178 was Toronto's second-smallest of the season, and well short of the 18,556 who showed up just down the street to watch the NHL's Toronto Maple Leafs open their preseason schedule against Ottawa.

Mariners, 12, Indians 6, 7 innings, rain

At Cleveland, Mike Carp hit a grand slam into the second deck in right field and drove in five runs during Seattle's nine-run third inning.

The Mariners came in for one day to make up a rainout from May 15, and played in a steady drizzle before the field was covered at the start of the eighth. After waiting 44 minutes, it was called.

Carp connected against reliever Chad Durbin for a 455-foot shot to put Seattle ahead 11-4. He doubled home the first run in the inning off David Huff (2-6).