Most of the story is told in flashback from Veer's prison cell.
Zaara Haayat Khan (Preity Zinta) is an independent, carefree, and sprightly young Pakistani girl travelling to India. Her bus, which is traveling to India with her "bebe's" (a Punjabi word to denote mother or grandmother, but here used for Zaara's old governess) ashes. Before dying, "Bebe" (Zohra Sehgal) begs Zaara to fulfill her final wish - to take her ashes to India, to the holy Sikh city of Kiritpur, and scatter her ashes in the river there, among her ancestors. Zaara decides to carry out Bebe's dying wish.
In India, Zaara's bus gets into an accident, overturns, and she is saved by an Indian pilot, Squadron Leader Veer Pratap Singh (Shahrukh Khan). Zaara completes her Bebe's final rites with the help of Veer. He convinces Zaara to go back to his village with him, and spend one day together. Veer then takes Zaara on a tour of India's Punjab and they visit Veer's hometown during the Lodi festival. The two fall in love and Veer is just waiting for the right time to tell Zaara how he feels about her. But then it is revealed that Zaara is engaged to another man, Raza (Manoj Bajpai). During their last few moments together, Veer confesses his love, then watches sadly as Zaara boards the train that will take her back to Pakistan. Both believe that this is the end of the story, and the last time they will ever see each other.
Zaara eventually realizes that she loves Veer and cannot marry her fiancé; Veer, after being told over the phone by Zara's friend Shabbo, that how miserable Zara is without him, quits the Indian Air Force and goes to Pakistan to bring her back with him to India. Zaara's mother, however, begs him to leave Zaara. Zaara's father is a high-profile politician whose reputation will be ruined if news got out that his daughter is in love with a Hindu man. Veer respects this and decides to leave. But Zaara's fiancé, outraged by the shame Zaara has brought upon him, frames Veer and has him wrongly imprisoned for being an Indian spy.
22 years later, Veer meets Saamiya Siddiqui (Rani Mukerji), who is an idealistic Pakistani lawyer, whose mission in life is to pave the path for women's empowerment. To dissuade a female lawyer from being successful, she has been given Veer's case, an impossible case to many. The man has been languishing in prison and has not spoken for the last 22 years.
Veer tells Saamiya she can do anything for the case except mention, much less subpoena, Zaara's family. He's assigned the number 786 for his prisoner number. This convinces Saamiya that God has chosen Veer for some special purpose, and determined to exonerate him, and restore his name, identity and country.
After a number of attempts which fail to prove Veer's innocence, Saamiya goes to Veer's village in India to gather evidence proving Veer is Veer and not Rajesh Rathore the spy. There, Saamiya finds Zaara has taken over in the village for Veer's parents. Saamiya convinces Zaara to go back to Pakistan with her and finally tell the truth about Veer's identity. The judge releases Veer from prison and apologizes on behalf of Pakistan. After Veer is finally released, he and Zaara return to India together, at last reunited.
|Shahrukh Khan||Veer Pratap Singh|
|Preity Zinta||Zaara Haayat Khan|
|Rani Mukherji||Saamiya Siddiqui|
|Kirron Kher||Mariam Hayaat Khan|
|Boman Irani||Jahangir Hayaat Khan|
|Anupam Kher||Zakir Ahmed|
|Amitabh Bachchan||Chaudhary Sumer Singh/Bauji (Guest Appearance)|
|Hema Malini||Saraswati Kaur/Maati (Guest Appearance)|
|Manoj Bajpai||Raza Shirazi|