The Royals remained five games back of the American League Central-leading Indians, who beat the Braves, 8-3, for their 10th straight win on Monday.
Duffy gave up six hits and two earned runs. He walked none and struck out eight, and his 68/101 strike ratio was nearly right at his season average of 68 percent since joining the rotation. The only blemish was a two-run homer to Matt Holliday in the first.
"I didn't really feel a need to settle down after that," Duffy said. "I thought I made a good pitch. He's just so strong. You just tip your cap in that situation.
"It's nice to go eight innings. Any time you can save the bullpen it's a good thing. Very gratifying."
Cardinals right-hander Adam Wainwright came into the game with a 4-0 career mark at Kauffman Stadium with a 2.72 ERA. But the Royals peppered him for eight hits and six runs (four earned) in the first two innings, making him spend 61 pitches. He was gone after five innings and 102 pitches.
"If I just make a different pitch three of those times or four of those times, we're talking about zeros instead of big, crooked numbers," Wainwright said. "It was pretty frustrating. I had decent stuff today, too."
All six runs scored off Wainwright came with two outs. Five of them came on balls put in play with two strikes. The Royals made Wainwright throw 40 pitches while batting around in the second. Wainwright did rebound to end his outing by retiring 10 of the final 11 batters he faced.
"Nice job of kind of gritting through five, helping us out," Cardinals manager Mike Matheny said.
MOMENTS THAT MATTERED Sizzling K-Mo: Morales now has reached base in his last 12 starts, and since June 11 is 20-for-45 (.444) with four homers and 15 RBIs in that stretch. He stroked a two-run single in the first that tied it at 2. He also singled in the second and doubled to left in the fifth -- all hits coming left-handed, which had been his troubled side until recently. Morales now is hitting .243, his high-water mark since April 25.
"The big thing is I'm loading my backside more and getting through the ball," Morales said through interpreter Pedro Grifol. "I wasn't doing that earlier in the year."
Morales' bad luck from earlier in the season -- when seemingly every line drive was being caught -- finally has flipped.
"I felt that in the beginning of the year, I had a lot of hard contact right at everyone," he said. "But it's a long season. It's very difficult to go through a whole season with that type of [bad] luck."
Added Yost, "With veteran guys like him, it was just a matter of time."
Not crisp enough: A pair of mistakes -- one in the field, the other on the bases -- hurt the Cardinals' chances of notching a win to open the series. Matt Carpenter's first-inning error extended the inning and set up Morales' game-tying single. The error was Carpenter's first in 16 games as a second baseman. Aledmys Diaz then ran into an out after a one-out double in the sixth. Caught by Duffy as he tried to steal third, Diaz was erased from the basepaths just before Holliday launched a double.
High chop: The Royals broke it open in the second in unusual fashion. Eric Hosmer, with runners on first and third, got fooled on an inside curveball from Wainwright and chopped a one-hopper toward first. Cardinals first baseman Jedd Gyorko seemed to misjudge his leap and ball floated over his glove and down the line for a two-run double.
"For me, that was the big hit of the game," Yost said. "That's what gave us some breathing room. We did a lot of two-out hitting."
A dandy DH: Serving as the Cardinals' designated hitter for the seventh time this season, Holliday gave the Cardinals an early 2-0 lead with his 15th homer of the season. He's hit five of those homers as a DH and has four extra-base hits over the last two games. Holliday, at age 36, is on pace for 32 homers and 98 RBIs. His highest home run total as a Cardinal was 28 in 2010.
QUOTABLE "Baby steps every day. Whether I'm in the game or not, I have to do what I can to work and move forward. Every little thing counts. I did a better job of being in the zone, getting ahead and being in more aggressive counts, for sure." -- Cardinals reliever Trevor Rosenthal, who threw a scoreless eighth in his first outing since being removed from the closer's role
SOUND SMART WITH YOUR FRIENDS Carpenter had his 18-game on-base streak come to an end by going 0-for-4. This was a surprising place for his roll to end, too, as Carpenter entered the series with a .475 average and .532 on-base percentage lifetime at Kauffman Stadium.
DIAZ SUSTAINS EYE INJURY Cardinals rookie shortstop Diaz fouled a ball off the top of his right orbital bone in the ninth inning, but early tests indicate that the impact did not cause a fracture. Diaz left the field with a towel to his face and was scheduled to undergo additional exams at a local hospital later in the evening. More >
"In the beginning, I was a little scared because I couldn't see anything and it was a little blurry," said Diaz, who had a welt between the top of his right eye and his eyebrow. "But thank God it just went down, and I'm now able to see just fine. It was actually a really scary moment. A lot of things went through my mind."
WHAT'S NEXT Cardinals: Right-hander Michael Wacha (3-7, 4.41 ERA), who snapped a 10-start winless streak his last time out, will get the ball for the I-70 Series rematch on Tuesday at 7:15 p.m. CT, as the Cards close out their nine-day road trip. The club is expected to activate catcherBrayan Pena from the disabled list before the game.
Royals: Right-hander Yordano Ventura (6-4, 4.54) returns from his eight-game suspension on Tuesday as the Royals wrap up the two-game series with the Cardinals at Kauffman Stadium. Ventura last pitched on June 17 and logged 6 1/3 scoreless innings in a win over Detroit.