With Atletico having only three more matches to play at the Vicente Calderon ahead of the club's move to Wanda Metropolitan, fans held up banners celebrating some of the club's greatest moments, but Diego Simeone's men were unable to break down a stubborn Villarreal outfit and slipped to their first defeat since February.
Fernandez brilliantly denied Angel Correa early in the match and that save set the tone for a starring role from the goalkeeper, with further saves from Antoine Griezmann and Nico Gaitan crucial to defending his clean sheet.
Villarreal beat Atleti 3-0 at home earlier in the season and Fran Escriba's side did the double thanks to substitute Soriano, who converted Cedric Bakambu's cross in the 82nd minute.
Atletico have beaten Villarreal just once in the last six meetings between the sides, with the visitors recording their ninth away clean sheet of the season in the league, ending Atletico's 11-game unbeaten run in all competitions.
Defeat leaves Atletico seven points behind leaders Barcelona and Real Madrid and three clear of Sevilla in the race for Champions League spots, while Villarreal consolidate their fifth place as they at worst seek to qualify for the Europa League.
Atletico burst into life after 10 minutes, with Fernandez having to plunge to his right to keep out Correa's low shot, before Saul Niguez headed straight at the goalkeeper.
Griezmann's powerful strike was beaten away by Fernandez as the striker raced on to Koke's chipped throughball and Gaitan's rebound header was tipped around the post.
Correa hit the side netting after 33 minutes as Villarreal, who have now kept four successive clean sheets against Atletico, continued to frustrate the hosts.
Fernandez continued to be busy after the interval, making a brilliant one-handed save from Gaitan after the midfielder raced through on goal and Simeone then introduced Yannick Carrasco and Kevin Gameiro for Gaitan and Correa in a bid to spark life into his side.
Filipe Luis bent a shot over the angle and Atletico defender Stefan Savic almost flicked a header into his own goal as the deadlock remained stubbornly unbroken.
Substitute Fernando Torres could only head Griezmann's left-wing cross wide after 72 minutes before Bruno Soriano tested Jan Oblak for the first time, the Atleti stopper making a comfortable save from the Villarreal captain's long-range strike.
Fernandez made yet another save to deny Jose Gimenez and the goalkeeper's heroics proved key as Villarreal snatched the points with less than 10 minutes to go.
Bakambu took advantage of Filipe Luis' lapse in concentration to burst away down the right and the striker's cross was superbly turned in by Soriano to stun the Vicente Calderon.
Key Opta stats:
- Villarreal are the first side to keep four clean sheets in a row against Atletico Madrid in LaLiga history.
- Antoine Griezmann has played more games without scoring against Villarreal than against any other side in LaLiga (12).
- Cedric Bakambu has scored four and assisted one of Villarreal's last six LaLiga goals.