Rahul (Shah Rukh Khan) and Nisha (Karisma Kapoor) are members of a massive dance troupe that performs dance based musical plays. They are the best of friends, although Nisha is secretly in love with Rahul. Rahul announces his desire to direct a musical named Maya. The members of the troupe, including Nisha, have their doubts about the title character, “Maya”, who Rahul describes as a girl who believes in true love and awaiting for her prince charming who will surely turn up and take her away. Meanwhile, Pooja (Madhuri Dixit) is introduced, an amazing dancer, classically trained as well, and passionate about dancing. Having been orphaned at a young age, she has been raised by close friends of her parents.
Pooja and Rahul have a string of near-misses as they run into each other time and again. Each of these instances is marked by a tune playing in the background, that registers with Pooja. During rehearsals for the play, Nisha injures her leg and the doctor says she cannot dance for a few months. Rahul needs a new woman to play the lead role in the play. He comes across Pooja dancing one day and believes she is perfect for the role. He begs her to come to their rehearsals and she agrees. Rahul and Pooja become close friends. Doted upon by her foster family, Pooja is soon taken to Germany by her guardian’s son Ajay (Akshay Kumar), her childhood best friend who has been in London for months. Just as Ajay leaves to fly to England, he proposes to Pooja. In a dilemma, she ends up accepting it.
Nisha soon returns from hospital and is upset that she has been replaced. Upon learning that Rahul loves Pooja, she becomes very jealous of her. Knowing that Rahul does not reciprocate her love, she decides to leave for London. Throughout rehearsals, Rahul and Pooja find themselves falling for one another. When Rahul drops Pooja home one day, he starts whistling his tune, making Pooja realize that she has fallen for the man with the tune she so often heard. The next day, the two go to meet Pooja’s old dance tutor, who Pooja addresses as Tai (Aruna Irani), who figures that the two are blatantly in love. At the wedding of two members of the dance troupe, Rahul and Pooja share an intimate moment but are unsure how to fully express their love.
A few days before the premiere, Ajay arrives at the rehearsal hall to surprise Pooja while telling everyone that he is her fiancé. Rahul is heartbroken but tries not to show it. Nisha, who has returned, notices Rahul’s devastation and explains how she too was devastated when he did not love her in return. Rahul edits the end of the play to reflect his heartbreak, in contrast to his usual style of always giving a happy ending. On the night of the premiere, as Rahul and Pooja’s characters are about to break up on stage, Ajay plays a recorded tape Pooja was going to send him before his proposal where she described how she felt about Rahul. Ajay is indirectly telling Pooja that she and Rahul are meant to be together. Pooja now realises she truly loves Rahul and the two confess their love on stage as the audience applauds them, giving the play a happy ending once again. Also, backstage, Ajay ends up asking Nisha whether she is already married or not (implying him getting interested in her).