Jermaine O'Neal saw James Harden's last-second 3-pointer bounce off the rim, went up for it and figured Phoenix and Houston were headed to overtime.
Referee David Jones saw goaltending and counted the basket that gave the Rockets a 101-98 victory on Tuesday night.
Harden scored 33 points and Omer Asik tied his career high with 22 rebounds for the Rockets, who earned their first playoff berth since 2009 when the Jazz lost to Oklahoma City.
"It's a great accomplishment for us," said Harden, acquired from Oklahoma City in an offseason trade. "For our first year together, it's a pretty good thing."
On the final play, Harden dribbled down the clock with P.J. Tucker guarding him and launched a 3 from the wing. It bounced high off the rim and O'Neal and Houston's Patrick Beverley jumped for the rebound. O'Neal touched the ball and the rim after the ball came down, just after the buzzer sounded.
The referees huddled on the court, then reviewed the play and ruled it the winning basket, setting off a wild celebration.
O'Neal couldn't believe it.
"It was off the rim, for sure," O'Neal said. "He (Jones) is saying it was still in the cylinder when I did it. The problem is that they called a goaltend and counted the basket before they did the review. So there's not enough evidence to change the call. You should make sure that's the call you should make, and it should be clarified before you say, 'Basket counts.'"
Jones had a different view.
"Jermaine O'Neal touched it while it was in the cylinder," Jones told a pool reporter. "The ball was on the rim and in the cylinder. He (O'Neal) doesn't go up through the net, his hand is on the net, but not in the net."
Harden went only 2 for 8 from 3-point range and had nine turnovers. He thought his last shot was going in, before O'Neal touched it.
"It actually felt good leaving my hands," Harden said. "The ball bounced up and I kept looking at it. I see these hands touch the ball, so I kind of was happy."
Jeremy Lin had 13 points and six assists and Francisco Garcia scored 15 for Houston.
Luis Scola scored 28 to lead the Suns, who've lost 10 in a row. This one stung O'Neal a little more than the others.
"I've never seen a game finish in a weirder way," he said.
Both teams were sloppy much of the night and combined for 37 turnovers.
The Rockets could never shake the Suns, a team they beat by 30 on March 13. The Suns went 9 for 23 from the field in the third quarter, but trailed only 78-74.
"A win is a win," Harden said, "it wasn't the prettiest win."
Lin sank a pull-up jumper in the lane to put the Rockets up 96-95, but Scola calmly sank another hook shot with 1:39 to go and Phoenix moved back ahead. O'Neal blocked Asik's shot, and Scola's free throw with 53.5 seconds left made it 98-96.
O'Neal questioned more calls than just the final goaltend. He was whistled for fouling Lin on a drive with 35 seconds left, and Lin sank the free throws to tie it again.
"They called three or four calls late in the game that helped determine the outcome of the game," O'Neal said.
Scola missed a finger roll, the Rockets rebounded and called time out to set up the final play.
The Rockets went 6 for 30 from 3-point range and Harden's shot looked like it was going to miss, too. It counted, though, and Houston will return to the postseason.
"A lot of other teams have other expectations," Harden said, "but I think everybody has a playoff in their minds."
The Rockets went 6 minutes without a field goal in the second quarter and trailed 53-51 at halftime.
Both teams coughed up sloppy turnovers that led to easy baskets early in the third quarter. The Rockets managed to build an eight-point lead after Greg Smith made an acrobatic move to score on an alley-oop pass from Lin. Markieff Morris sank a 3-pointer and Scola converted a three-point play to keep Phoenix close.
NOTES: The Suns are 2-15 since losing Marcin Gortat to a season-ending injury on March 6. ... Suns F Michael Beasley was not with the team after the birth of his daughter. ... Rockets F Carlos Delfino sat out with flu-like symptoms. ... The Rockets assigned C Tim Ohlbrecht to Rio Grande Valley, its developmental league affiliate.