TORONTO -- Rookie phenom Felix Hernandez had a chance to become the youngest pitcher in major-league history to throw a no-hitter until a questionable single ended his bid.
He cruised into the seventh until Corey Koskie hit a one-out liner to the left side. Seattle shortstop Yuniesky Betancourt jumped and had a chance to make a backhand catch, but the ball glanced off his glove.
A disappointed Hernandez crouched on the mound, and Blue Jays fans booed when the scoreboard showed it was ruled a hit.
"It was a tough play, so I don't feel like it was an error," Hernandez said through a translator.
Official scorer Doug Hobbs took another look at the play after the game, but kept it a hit.
Betancourt said he had "mixed feelings."
"I could have had it, but it was a tough play," he said through a translator.
Mariners manager Mike Hargrove said he was surprised it was ruled a hit, "especially in a no-no."
With two outs in the eighth, Aaron Hill's liner knocked Hernandez's glove off and rolled behind the mound for Toronto's second hit. That chased Hernandez (4-4), who threw 7 2/3 scoreless innings.
"The kid was dynamite," Toronto manager John Gibbons said. "That's all you can say. Everything you heard about him he did tonight."
The 6-foot-3 right-hander cracked 99 mph on the radar gun and used his biting curve to mystify Toronto's hitters. He struck out six and walked three in his 10th major league start. There has not been a no-hitter in the big leagues this season.
The youngest pitcher to throw one was Johnny Lush, who was 20 years, 204 days old when he did it for the Philadelphia Phillies against Brooklyn on May 1, 1906, according to the Elias Sports Bureau.
"He's going to have a lot more chances to throw shutouts," Hargrove said.
Eddie Guardado gave up a two-run homer to Shea Hillenbrand in the ninth before finishing for his 33rd save in 38 chances.
"Felix dominated," Guardado said. "We got the win, but you'd like to get the zero because Felix did his job."
Greg Dobbs hit a two-run single for the Mariners, who have won two straight following a four-game skid.
"He had electric stuff," Dobbs said. "It was just one of those nights where he couldn't miss."
Hernandez got off to a spectacular start in the major leagues after his promotion from Triple-A Tacoma on Aug. 3, going 3-2 with a 1.59 ERA in his first seven starts. However, he struggled in his last two outings, allowing a combined 11 runs and 15 hits in 10 innings to post consecutive losses.
Toronto starter David Bush (5-10) walked Jeremy Reed and Raul Ibanez leading off the fourth before Richie Sexson hit a 3-2 pitch for an RBI single. After Bush walked Adrian Beltre, Dobbs hit his two-run single to give Seattle a 3-0 lead.
Bush allowed three runs and three hits in 3 1/3 innings.
Toronto 2B Orlando Hudson has missed 12 straight games because of a sprained left ankle. Hudson has been taking batting practice lately and might return at the end of the week. ... RHP Gil Meche has replaced RHP Jeff Harris in Seattle's rotation and will make two starts before the season ends. Meche was activated from the 15-day DL on Friday after being out since Aug. 20 because of knee tendinitis. He pitched two scoreless innings in a relief appearance on Tuesday.