In the early 1900s, Kaushalya (Smita Jaykar) hears that her younger son, Devdas (Shah Rukh Khan), is about to return home after leaving 10 years ago for law school in England. Kaushalya tells her neighbor Sumitra (Kirron Kher), who is overjoyed.
Sumitra's daughter, Parvati "Paro" Chakraborty (Aishwarya Rai) and Devdas share a deep friendship rooted in childhood. When Devdas was sent to England, Paro had lit an oil lamp to prompt his return and never allowed it to extinguish.
When Devdas returns, the childhood friendship between him and Paro turns to love. Everyone believes that Devdas and Paro will get married, but Devdas' scheming sister-in-law Kumud (Ananya Khare) reminds Kaushalya of Paro's maternal lineage of nautch girls and nautanki performers, which is inappropriate for the Mukherjee family. Sumitra publicly announces her desire for Devdas and Paro to marry, and Kaushalya rejects and humiliates her in public by saying that she is from a lower class. Devastated, Sumitra hastily arranges Paro's marriage to a man from a family wealthier than the Mukherjees: Thakur Bhuvan Chaudhry (Vijayendra Ghatge), a forty-year-old widower aristocrat with three grown children.
When Devdas' father also rejects Paro, Devdas leaves his parents' house and takes refuge at a brothel. He leaves a letter for Paro, falsely stating that love had never existed between them. At the brothel, he meets a good-hearted tawaif (Courtisan) named Chandramukhi (Madhuri Dixit), who falls in love with him. Soon, Devdas realizes his mistake in abandoning Paro. He returns to her during her wedding and asks her to elope but Paro refuses, reminding him of the way he had discarded her so easily.
Paro learns from her new husband that he has married her only to be mother to his children and lady of the estate, but that his love is only for his late first wife. She dutifully fulfills her responsibilities, while Devdas, heartbroken at having lost Paro, permanently moves to Chandramukhi's brothel and becomes an alcoholic. When Devdas' father is on his deathbed, he asks to see his son Devdas, but Devdas arrives later, at his father's funeral—shamefully and obviously drunk. He causes a scene and eventually passes out.
Eventually, Devdas becomes so ill that the slightest dose of alcohol could kill him. He returns to the family home to heal, and discovers that his sister-in-law has stolen his mother's keys to the family safe. He confronts her but Kumud tells his mother that Devdas had stolen the keys. His mother believes her and Devdas leaves, banished. Paro arrives at Chandramukhi's brothel, accusing her of driving Devdas to drink, but quickly realizes that Chandramukhi loves Devdas. Paro urges Devdas to stop drinking, but Devdas remains stubborn. He promises Paro that before he dies, he will come to her doorstep one last time.
Paro invites Chandramukhi to a celebration of Durga Puja at her husband's home and introduces her to her in-laws without revealing Chandramukhi's profession. However, Bhuvan's ill-natured son-in-law Kalibabu (Milind Gunaji), a frequent visitor to the brothel, reveals Chandramukhi's background and humiliates her in front of the guests. He also tells Bhuvan of Paro's relationship with Devdas. As a result, Bhuvan permanently forbids Paro from leaving the mansion. Devdas tells Chandramukhi that she must let him go, and decides to travel the country; on a train, he meets his old college friend Chunnibabu (Jackie Shroff), who urges him to drink in the name of friendship. Devdas drinks, knowing full well it will be fatal.
On the verge of death, Devdas travels to Paro's house to honor his promise, collapsing under a tree in front of the main gate. Paro runs through the mansion, attempting to reach him. Bhuvan sees this and orders the servants to shut the gates. Devdas sees a blurred image of Paro running towards him, but the gates close just before she can reach him, leaving her sobbing inside. Devdas whispers Paro's name with his last breath as he slowly dies, and immediately Paro's lamp flickers out.