Duffy pitched six sharp innings to pick up his first victory in more than two months as the Kansas City Royals beat the Jays 3-0 Friday night.
Duffy (3-4) shut down a Blue Jays offence which leads the majors with 470 runs. He gave up four singles while walking three and hitting a batter to earn his first victory since beating Detroit on April 30.
"I wasn't really executing a whole lot, but my fastball was good enough to get in on guys and riding a little bit," Duffy said. "With the life I had on my fastball, I was able to get a couple of first pitch ground outs, a couple of more than I'm used to getting.
"That's the way I needed to pitch. With how much thump they have and how many good hitters they have, keep the ball down, put a little sink on it, try to get them to roll over it and they did tonight."
The Royals have won six straight to improve to an American League-best 51-34.
"Duffy manoeuvred through a real tough lineup," Royals manager Ned Yost said.
Eric Hosmer went 4 for 4, his first four-hit game of the season and his eighth career game with at least four hits. Salvador Perez, Alex Rios and Alcides Escobar each had two hits and an RBI.
Blue Jays right-hander Marco Estrada (6-5), who did not allow a hit until the eighth inning in two late June starts, gave up a season-high nine hits.
"It's a long season and I know that a lot of times it's going to feel like the changeup's not there," Estrada said. "I've just got to fight through it and work hard to get it back to the way it should be. I think I'm on the right path."
The Blue Jays, 3-7 in July, dropped below .500 for the first time since June 8.
Rios' double in the second scored Salvador Perez with the first run.
Escobar's two-out fourth inning single brought home Rios to make it 2-0.
Perez homered, his 15th, in the eighth off reliever Ryan Tepera.
Duffy was in trouble only in the fourth when he walked Danny Valencia and Russell Martin singled to begin the inning, but Duffy retired the next three batters.
"You could probably say he was effectively wild," Jays manager John Gibbons said. "He's got a good arm. He clutched up and made good pitches when he needed, good changeups. We had those chances, but it just didn't happen."
After Duffy exited, Royals relievers Kelvin Herrera, Wade Davis and Greg Holland completed the shutout. Holland struck out the side in the ninth for his 18th save in 20 opportunities.
Rain delayed the beginning of the game for 2 hours, 7 minutes.
The Royals' 51 victories before the break matches a club record. The 1976 and 2003 clubs also won 51 before the All-Star Game.
Blue Jays: Rookie RHP Aaron Sanchez (strained right latissimus dorsi) will throw 50 pitches for Advance-A Dunedin (Florida) on Saturday. If all goes well, he will report to Triple-A Buffalo for a Thursday for a rehab start.
Royals: 3B Mike Moustakas was reinstated from the bereavement/family medical emergency list after missing four games. Moustakas went 0 for 4 in his return. INF Cheslor Cuthbert was optioned to Triple-A Omaha and will play in the Future's All-Star game Sunday in Cincinnati.
Blue Jays: LHP Mark Buerhle, 4-1 in his past eight starts, will start Saturday.
Royals: RHP Chris Young will be working on three days for the fourth time in his career.