Isaiah Thomas scores 29 points for the Celtics, but after a foul on Marcus Smart, Jimmy Butler gives the Bulls the lead at the free throw line with 0.9 of a second left in a 104-103 win. (1:48)

CHICAGO -- The Boston Celtics say a win was stolen from them Thursday night when a foul was called on the Chicago Bulls' last-second shot.

Jimmy Butler was the beneficiary after his jumper hit the rim and the clock expired, and he stepped up and made both free throws, giving the Bulls a 104-103 win.

"We won this game," Celtics point guard Isaiah Thomas said. "We had it won. A great defensive stop by Marcus Smart, and the referee called a horrible call. That was bad."

The Celtics indeed celebrated when Butler's shot missed, but referee Zach Zarba called a foul on Smart that sent Butler to the line for two foul shots.

"When Jimmy shot the ball I heard him scream, 'No foul?'" Smart said. "And as soon as he said that, the whistle blew, and I looked and I saw him [the referee] raise his hand for the foul."

After video review to see how much time was on the clock when Butler took his shot, 0.9 of a second was added to the clock, and Butler calmly drained two free throws. Celtics big man Al Horford would miss a potential winning jumper a few moments later as time expired.

"I'm one of the best defenders in this league," Smart said. "I played great defense right there -- I know I did. I moved my feet, I did everything right, my head was up. I got punished for playing good D I guess."

Butler was steadfast that Smart hit his elbow as he put up the shot.

"A foul's a foul," Butler said after the game. "He hit my elbow. I don't care what nobody says. I think I'm making it if he don't alter it like that."

"People are going to say, 'Oh, he didn't foul him.' But he did," Jimmy Butler said of Marcus Smart. "So at the end of the day they made the right call." Jeff Haynes/Getty Images

Butler said he was still hoping the shot went in.

"But we ran it the way we were supposed to," Butler said. "We got the look that we wanted. I told Jerian [Grant] what move I was going to do and [Smart] got a piece of the elbow. People are going to say, 'Oh, he didn't foul him.' But he did. So at the end of the day they made the right call."

Celtics coach Brad Stevens said he didn't hear a whistle at the end amid all the noise. But after seeing the "commotion" on the floor, he figured one had been blown.

"It's part of it," Stevens said. "Move forward. I thought we played a pretty good game, and all things considered, being six [games] in nine [nights], the travel and everything else, I was proud of the way we competed. I'm not going to let [the end] derail that. I feel good about our team, and I feel good about the direction we're headed."

Bulls forward Taj Gibson said with a smile he wasn't taking the win for granted.

"Tonight we got lucky," Gibson said. "That's a talented team over there. We're going to enjoy this one."