Butler had 28 points and career highs of 17 rebounds and 12 assists. Pau Gasol had 16 points and 14 rebounds.
Detroit is a half-game ahead of Indiana for seventh in the Eastern Conference and 2 1/2 games up on ninth-place Chicago.
Jackson’s jumper gave Detroit an 86-83 lead with 1:46 left. After E'Twaun Moore and Butler missed 3s, Harris scored on a putback for a five-point lead. Morris made two free throws for Detroit’s largest lead at seven with 43.3 seconds left after Butler missed a layup and committed a foul.
Chicago cut it to 90-88 after Butler’s 3 and three free throws after Jackson committed an offensive foul on the inbound play.
Butler briefly went down but remained in the game when Jackson drove to the basket on the other end. Jackson made four free throws in the final 20 seconds.
Detroit shot 42.1 percent from the field while Chicago shot 38.6 percent. Butler went 10 for 25 from the field and grabbed five offensive rebounds. He also had three steals and two blocked shots. Butler averaged 33 points in three previous games against Detroit.
The Pistons have won three of four games against Chicago this season. Detroit beat the Bulls 147-144 in four overtimes on Dec. 18 in their previous meeting at the United Center. The Pistons were finishing a back-to-back after losing 98-89 to Dallas on Friday.
Drummond was averaging 26.5 points and 20.5 rebounds against the Bulls this season.
Detroit had lost 17 of 19 games in Chicago.
Nikola Mirotic had scored 28 points in each of his last two games for Chicago. He had six.
The Pistons were ahead 46-45 at halftime. Butler had 12 points, 11 rebounds and eight assists and missed a 3 before the buzzer. Morris scored 12 and Harris had 10 for Detroit.
Pistons: Detroit went 6-3 during its most recent homestand. … Three of the Pistons’ five remaining games are on the road.
Bulls: G Derrick Rose (elbow) and F Taj Gibson (rib) did not play. Rose said his elbow is improving but remains tender and he is unable to dribble with that arm. He also missed the second half of Thursday’s game against Houston. … Gibson returned to the team Saturday after traveling to New York for a personal issue. … Moore started instead of Rose, and Bobby Portis made his second start in place of Gibson. … Gasol became the 38th NBA player with 10,000 career rebounds. He is also the 36th with 10,000 points and 10,000 rebounds.
Pistons: Tuesday night at Miami.
Bulls: Sunday night at Milwaukee.