ST. LOUIS -- It seemed like Ricky Nolasco was always in trouble. But in a game that began in 103-degree heat, it was the St. Louis Cardinals who were sweating.
Nolasco allowed an unearned run in six innings while scattering nine hits and a walk and Jose Reyes got the go-ahead RBI with an infield hit in the seventh, leading the Miami Marlins to a 3-2 victory on Friday.
"Obviously, I had a lot of baserunners," Nolasco said. "Very tough lineup. They made me battle, made me keep fighting. Just enough to get these guys."
Logan Morrison added his second home run in three games in the eighth for the Marlins, who won their third in a row and beat the Cardinals for just the second time in the last 10 meetings. St. Louis was 2 for 16 with runners in scoring position, stranding five at third base to frustrate a sellout crowd that waited patiently for a rally that never materialized.
"We had a lot of opportunities out there with runners on base," Allen Craig said after going 1 for 4 with an infield hit. "We got a lot of hits, we just didn't drive them in."
Fans had to settle for a great view of the Fair St. Louis fireworks display on the Mississippi River waterfront -- easily visible over the scoreboard in right-center -- that began right before Reyes beat out a slow roller down the third-base line to break a 1-all tie.
David Freese had three hits and an RBI for the Cardinals, production that was offset when he committed two errors and nearly had a third in a sloppy sixth that allowed the Marlins to tie it. Freese, picked to his first All-Star Game on Thursday, entered with five errors in 76 games.
Freese left Busch Stadium without talking to reporters.
Heath Bell allowed pinch-hitter Skip Schumaker's leadoff double and a one-out, run-scoring infield hit by Rafael Furcal in the ninth before finishing for his 19th save in 24 chances. He entered 0-3 with an 8.83 career ERA against St. Louis, and 0-3 with a 6.23 ERA on the road this season with four blown saves in 11 opportunities.
Bell was pitching for the fourth straight day, and manager Ozzie Guillen had been concerned. But noted the Cardinals hit only one ball hard.
"I personally thought I was fine," Bell said. "I'm definitely not going to be 100 percent, but I felt like I was 97 percent. I could hit my spots, and throw pitches."
Jake Westbrook (7-7) allowed two runs, one earned, in 6 2-3 innings. He had the Cardinals' third error with a wild throw on Reyes' soft tapper not far from the plate.
"If it was another runner I'd have a little more time," Westbrook said. "I felt like I had to rush it a little bit just because of who it was and I just didn't make a good throw on it."
Nolasco (8-6) gave up nine hits but got the big outs when it counted against the Cardinals, holding them to 1 for 11 with runners in scoring position. The right-hander beat the Cardinals for the first time in five career decisions, two starts after allowing an unearned run in 6 2-3 innings but got no decision in an 8-7 loss to St. Louis in Miami.
Freese made a nice stop on Reyes' smash to start the inning, righted himself and then pulled Craig off the first base bag with a high throw. The Cardinals settled for a forceout the next at-bat when Freese fielded a grounder by Hanley Ramirez and pulled second baseman Daniel Descalso so far off the bag he had to make a diving stab with his glove.
Carlos Lee's grounder went right between Freese's legs for a two-base error as Ramirez scored from first. Freese's throw on Justin Ruggiano's double-play ball was also high, but Craig landed his foot in time.
Craig reached on an infield hit and took second on Reyes' wild throw from shortstop, then scored on Freese's double that bounded high off the third-base bag.
Morrison hit his 11th homer off Maikel Cleto in the eighth to make it 3-1 and also was hit twice by Westbrook, doubling his season total. He has four homers and 11 RBIs during a nine-game hitting streak, plus has homered in his last two games against St. Louis with a pinch hit drive June 27 in Miami.
NOTES: Furcal was removed for a pinch runner after his hit in the ninth after aggravating a shin injury. ... Kyle Lohse (8-2, 2.80) will try to beat the Marlins for the third straight start on Saturday, opposing Carlos Zambrano (4-6, 4.14). ... Ruggiano is 16 for 33 during a nine-game hitting streak. ... Gregg Dobbs singled in the seventh and has hit in nine straight, one off his career best. ... Attendance of 46,721 was the Cardinals' 14th sellout and third-largest crowd of the season. ... Schumaker is 4 for 8 with three doubles against Bell.