El primer equipo de Joan Capdevila fue la U.E. Tàrrega, aunque realmente comenzó su carrera deportiva en el Espanyol. El 31 de octubre de 1998 debutó en Primera ante el Athletic Club en el Estadio de San Mamés, La Catedral. Esa temporada jugó 29 partidos de LaLiga y marcó cuatro goles.
Después de pasar un año en el Atlético de Madrid, en 2000 se incorporó a las filas del Deportivo de La Coruña, donde acabó adueñándose del lateral izquierdo. Jugando 5 temporadas consecutivas Champions League, y ganando Copa del Rey y Super Copa de España. Fichó por el Villarreal para la temporada 2007/2008 y donde se quedaría hasta el año 2011, jugaría Champions y ganaría otra Super Copa de España.
Ese año 2000 viajaría hasta Australia para competir en los Juegos Olímpicos de Sidney 2000, consiguiendo ser Medallista Olímpico con la plata conseguida en la final contra Camerún.
Como internacional con la Selección Española de Fútbol vivió como protagonista entre 2008 y 2010 los mayores éxitos de la historia de la Selección. Alzandose con el título de la Eurocopa 2008 y la Copa del Mundo en 2010, siendo el único jugador en disputar todos los minutos del torneo junto a Iker Casillas y Gerard Piqué.
En 2011 decidió salir de España para viajar hasta el país vecino, Portugal, donde fichó por el Benfica, disputando 13 partidos en los que marcó 2 goles, alzandose con la Copa de la Liga de Portugal.
Al año siguiente, en 2012, volvió a España para reencontrarse con el R. C. D. Espanyol, en el que militó hasta el 24 de mayo de 2014, cuando el club catalán decidió no renovar su ficha tras finalizar la temporada.
Capdevila aúna experiencia, tiene recorrido, y buen olfato goleador. El último curso sumó cinco dianas en los 36 partidos de LaLiga disputados, todos como titular.
En julio del 2014, ficha por el equipo North East United FC de la Superliga,en donde estuvo una temporada, para acabar fichando por el Lierse SK de la Belgacom League, segunda división belga, en la temporada 2015/16.
En la temporada 2016/17 ficha por el equipo andorrano FC Santa Coloma, donde tuvo la oportunidad de jugar la primera ronda previa de Champions League.
El 4 de julio de 2017 puso punto y final a su carrera como futbolista tras disputar el partido de vuelta contra el equipo armenio del Alashkert en la primera eliminatoria previa de la Champions League tras caer eliminado por un global de 2 a 1.