12살의 제시는 어머니로부터 버림을 받은 후, 거리에서 방황하며 살아가는 소년이었다. 거리에서 좀도둑질을 하며, 경찰서를 제집드나들듯 드나드는 제시는 어느날 마을에 있는 수족관에 들어가, 친구와 벽에 낙서를 한게 발각되어, 두달동안 수족관 청소를 해야하는 벌을 받게 된다. 제시는 지금까지 소년 보호원에 안가는 대신 벌로 각종 궂은 일을 해야했지만, 이번엔 하루종일 수족관의 유리와 벽을 닦는 일을 하게 된 것이다. 그러나 제시는 이곳에서 뜻하지 않은 우정을 발견하게 된다. 바로 이 수족관의 최고의 스타이자 신비에 싸인 고래 윌리. 7000 파운드가 넘는 고래 윌리는 이 수족관의 어떤 조련사의 말도 듣지 않고, 고래쇼에 나가서 재주부리는 걸 거부하는등 수족관에서 가장 큰 골치덩어리인 고래였다. 제시는 이 거대한, 모든 것을 거부하는 윌리에게 큰 흥미를 느낀다. 제시의 계속되는 사랑에, 윌리 또한 누구에게도 보인 적이 없었던 신뢰를 제시에게 보이고, 둘은 비록 동물과 사람이라는 장벽이 있었지만, 뗄레야 뗄 수 없는 애정을 서로에게 느끼게 된다. 제시가 기대하지 못한 것은 동물 조련사 레린들리(로리 페티 분)와 잡역부 랜돌프 존슨(어거스트 슐런버그 분)를 친구로 사귀는 것이었다. 그리고 특히나 공원의 악명높고 비사교적인 거주자 윌리와 친구가 되리라고는. 제시가 윌리와 의사소통의 방법을 배우고 윌리에게서 믿음과 우정을 얻게 되면서, 그리고 그 웅장한 고래가 지느러미를 돌려 구르고 다이빙을 하고 도약을 하는 등의 감탄할 만한 행동의 연속으로 답하면서 상호신뢰와 애정의 유대감이 두 부적응자 사이에 서서히 발전한다. 그러나 다이얼과 웨이드가 그 장엄한 동물에 대해 무서운 계획을 꾸미고 있음을 발견했을 때 제시는 그의 앞에 단 한가지 선택이 남아있음을 깨닫는데...