Homicide detective John Hobbes (Denzel Washington) and Edgar Reese (Elias Koteas), a serial killer, are talking just before the latter is going to be executed in prison. Reese is proud of all his crimes, and doesn't repent at all. Hobbes witnesses the execution of Reese. At the last second, Reese starts shouting that he is innocent, that it wasn't him, all his cocky demeanour lost.
However, this doesn't finish the matter. Soon after the execution the killings start again, and they are very similar to Reese's style. Hobbes starts hearing people on the street singing the same tune that Reese sang in the gas chamber.
He is told that maybe the fallen angel Azazel is behind it all. Azazel is cursed to roam the Earth without a form, and he can switch bodies by any contact, making him hard to track. The last clue is given by Gretta Milano (Embeth Davidtz), a semi-mad woman who lives in a flat crammed with bric-a-brac, pictures, and small statues representing all kind of of angels. When Hobbes is forced to kill a man possessed by Azazel, he must clear his name while protecting his family and others from the evil, vengeful Azazel. Milano tells him to kill Azazel in a place where no other person is around. If Hobbes kills the person who is at the moment possessed by Azazel, and he himself commits suicide, the fallen angel will die, because he can't survive for long without a body.
Hobbes is determined. His workmates are suspicious of him. They think that he has tricked them all, being the serial killer from the very beginning, or that he has become so obsessed with the serial killer that now he's copy-cattting him. His co-worker and closest friend, Det Jonesy (John Goodman), is one of those who seem to have changed their minds concerning Hobbes. Lou and Stanton (James Gandolfini and Donald Sutherland) start having no doubts that Hobbes is the killer.
Hobbes goes to a lonely cottage kilometers away from nowhere where he has dared Azazel to go. To his surprise, it's Jonesy who goes. He tells him that it was about Hobbes from the beginning. When Hobbes and Reese had the conversation, there was a second when they shook hands, but Azazel could not move inside Hobbes because he was an honest and good person. There is a final confrontation and Hobbes kills Jonesy, and then kills himself.
It seems that evil has died. However, a voice tells the audience that there is only an animal which can hold a demon, a cat. We see a cat which is making its way to the nearest inhabited town. The audience now knows that Hobbes didn't succeed.