Jerry Black (JACK NICHOLSON) is a Reno homicide detective who's only a few hours away from retiring when he and his partner, Stan Krolak (AARON ECKHART), arrive at the snowy murder scene of Jenny Larsen, a blond eight-year-old who was sexually assaulted before being killed. Jerry then meets with the victim's parents and promises the girl's mother (PARTRICIA CLARKSON) that he'll find the killer.
It doesn't take long for the police to arrest Toby Jay Wadenah (BENICIO DEL TORO), an American Indian who was spotted at the scene and previously served time for rape and other crimes. Stan manages to get a confession out of the suspect, but Jerry's concerned that the mentally handicapped man might not exactly know what he's confessing to. Nevertheless, all of the evidence points to him, and after he takes his own life, Stan and their boss, Eric Pollack (SAM SHEPARD), believe the case to be solved and closed.
Yet, something doesn't sit right with Jerry, and instead of heading off on a post-retirement fishing vacation in Mexico, the former detective starts snooping around. After talking to the girl's grandmother, Annalise Hansen (VANESSA REDGRAVE), her best friend at school, and even the father of another victim (MICKEY ROURKE), Jerry begins to see connections with other similar and still unsolved murder cases.
When neither Stan nor Eric will reopen the case, Jerry sets off on his own, buying a gas station strategically located near the middle of where the various murders have taken place. He eventually meets and befriends a local waitress, Lori (ROBIN WRIGHT PENN), whose young daughter, Chrissy (PAULINE ROBERTS), fits the profile of the past victims.
As time passes and Jerry becomes closer to Lori and Chrissy and grows increasingly suspicious of a single, local man, Gary Jackson (TOM NOONAN), he does what he can to keep his former promise of catching the killer, a pledge that ultimately causes him to make some questionable judgment calls while doing so.