Filip Zadina got the go-ahead goal in his first game in more than three months, and Dylan Larkin scored for Detroit (22-20-8), which had lost two in a row.
"Everyone in this league is a pro and works hard to come back from injuries, but [Zadina] took that to another level," Red Wings coach Derek Lalonde said. "He has worked extremely, extremely hard and it was great to see him rewarded for it."
Blake Coleman scored for Calgary (24-18-10), which has lost three of four (1-2-1). Dan Vladar made 15 saves but had his point streak stopped at 13 games (10-0-3), which tied the Flames record.
"We're struggling to create offense right now, so we have to find ways to get ugly goals," Coleman said. "We can't expect highlight-reel goals. We have to have guys willing to pay the price to get to the net."