Rodriguez, of the Katusha team, crossed the finish line of the 175.4km course between Tarazona and Jaca just ahead of Britain's Christopher Froome, followed by Spain's Alejandro Valverde.
He completed the stage, which includes two virtually back-to-back category three climbs, in four hours, 15 minutes and 56 seconds, just five seconds ahead of Froome.
Valverde was t10 seconds behind the stage leader.
"I sped up just in case because I did not know who was behind me. At no time did I know where Valverde, who was the most dangerous rider, was," Rodriguez said at the end of the race.
"I am very happy. I knew I could beat Froome, I saw him stuck in the last minute," he added.
The stage was decided in the last 10km as the riders climbed up to the finish line at the Fuerte del Rapitan.
Froome and his Sky teammates, Colombia's Rigoberto Uran and Sergio Henao, led the climb at a very fast pace.
Meanwhile, Rodriguez and his fellow Spaniard Alberto Contador, who is racing for the first time since a doping ban, followed closely behind.
Rodriguez managed to pass Froome just metres from the finish line while Contador was unable to maintain the pace and ended up with a fourth-place stage finish.
The Spanish rider, nicknamed 'Purito', has a 10-second advantage over second-place Froome in the overall standings. Contador is third overall, 36 seconds behind Rodriguez.
The 21-stage race finishes on September 9 in Madrid.
The Vuelta is one of cycling's three 'major tours' along with the Tour de France and the Giro d'Italia.
Results on Thursday from the sixth stage of the 67th Spanish Vuelta, a 175km stage starting in Tarazona and finishing at Jaca:
1. Joaquim Rodriguez, Spain, Katusha, 4 hours, 35 minutes, 22 seconds.
2. Christopher Froome, Britain, Team Sky, 5 seconds behind.
3. Alejandro Valverde, Spain, Movistar, :10.
4. Alberto Contador, Spain, SaxoBank, :19.
5. Eros Capecchi, Italy, Liquigas Cannondale, same time.
6. Rigoberto Uran, Colombia, Team Sky, same time.
7. Rinaldo Nocentini, Italy, Ag2r La Mondiale, :25.
8. Mauro Santambrogio, Italy, BMC, :28.
9. Nicolas Roche, Ireland, Ag2r La Mondiale, same time.
10. Robert Gesink, Netherlands, Rabobank, :33.
Overall Standings (After 6 of 21 stages):
1. Joaquim Rodriguez, Spain, Katusha, 22 hours, 4 minutes, 32 seconds.
2. Christopher Froome, Britain, Team Sky, 10 seconds behind.
3. Alberto Contador, Spain, SaxoBank, :36.
4. Rigoberto Uran, Colombia, Team Sky, :42.
5. Robert Gesink, Netherlands, Rabobank, :54.
6. Alejandro Valverde, Spain, Movistar, same time.
7. Nicolas Roche, Ireland, Ag2r La Mondiale, 1:04.
8. Bauke Mollema, Netherlands, Rabobank, 1:12.
9. Daniel Moreno, Spain, Katusha, 1:17.
10. Juan Jose Cobo, Spain, Movistar, 1:34.