Miranda debutó en el Coritiba en 2004. Allí consiguió su primer título al proclamarse campeón del Campeonato Paranaense. Debido a sus actuaciones con el club brasileño, al año siguiente, dio el salto a Europa fichando por el Sochaux por aproximadamente dos millones de euros. Tras una temporada en el club francés fue cedido al São Paulo en julio de 2006 y adquirido finalmente en propiedad en marzo de 2007 a cambio de 1.2 millones de euros aproximadamente.
São Paulo
En el club brasileño se convirtió en pieza clave de la defensa y ayudó al equipo a conseguir tres campeonatos de liga consecutivos en 2006, 2007 y 2008. Internacionalmente disputó la Copa Libertadores siendo su mayor éxito el subcampeonato alcanzado en 2006.
Atlético de Madrid
Éxito europeo
Cinco años después, el 12 de julio de 2011, fichó por el Atlético de Madrid. El 28 de julio de 2011 debutó con la camiseta rojiblanca en el partido de ida de la tercera ronda de clasificación de la Europa League. Su debut no fue muy afortunado pues en el minuto 77 fue expulsado del encuentro por roja directa cuando el marcador era favorable a los rojiblancos por dos a cero. Finalmente, el partido terminó con una victoria por dos a uno del Atlético de Madrid frente al Strømsgodset. El 10 de septiembre de 2011 debutó en Liga en el partido contra el Valencia correspondiente a la tercera jornada. El partido terminó con una derrota por uno a cero. El 8 de diciembre jugó su primer partido de Copa del Rey con la camiseta del Atlético de Madrid en la derrota de su club frente al Albacete Balompié en la ida de los dieciseisavos de final. Miranda saltó al campo en el minuto 68, un minuto antes de que Adrián anotara el definitivo dos a uno, sustituyendo a Javier Manquillo para reordenar la defensa tras la expulsión de Álvaro Domínguez. El 11 de marzo de 2012 consiguió su primer gol con la camiseta del Atlético de Madrid al inaugurar el marcador frente al Granada en la vigesimoséptima jornada de Liga. Miranda anotó el uno a cero de volea tras un rechace posterior a un centro al área. El partido finalizó con una victoria por dos a cero. El 19 de abril anotó su primer gol en competición europea en el partido de ida de las semifinales de la Europa League frente al Valencia. Su gol significó el dos a uno de la victoria final por cuatro a dos. En el partido de vuelta en el que Miranda fue de nuevo titular, el Atlético de Madrid venció por cero a uno y se clasificó para disputar la final. El 9 de mayo de 2012 el Atlético de Madrid disputó la final de la Europa League y Miranda consiguió su primer título con el club rojiblanco al vencer por 3 a 0 al Athletic Club.
Como campeón de la Europa League en 2012, el Atlético de Madrid disputó el 31 de agosto de 2012 la Supercopa de Europa ante el Chelsea, campeón de la Champions League. Miranda levantó un título más al vencer el club colchero por cuatro goles a uno, anotando además el cuarto gol de su equipo.
Regularidad
Durante la temporada 2012-13 el Atlético de Madrid tuvo una actuación muy regular en Liga terminando en tercera posición y consiguiendo el objetivo de clasificarse para la Liga de Campeones 2013-14. Miranda formó pareja con el uruguayo Diego Godín y se convirtieron en la defensa menos goleada de la Liga y su portero, Thibaut Courtois, en el Zamora de la competición. Sus buenas actuaciones propiciaron que el 12 de marzo de 2013 ampliara su contrato[2] con el Atlético de Madrid por dos temporadas más quedando así ligado al club hasta 2016.
En la Copa del Rey el Atlético de Madrid se clasificó para disputar la final el 17 de mayo de 2013 ante el Real Madrid en el Santiago Bernabéu. En dicha final, el club rojiblanco se proclamó campeón tras vencer al Real Madrid por 1-2. El partido llegó al final de los 90 minutos con empate a uno y en la prórroga, un cabezazo de João Miranda decretó el 2 a 1 final que le dio el título al Atlético y cortó una racha de 14 años sin vencer a su eterno rival.
Campeón de Liga
De nuevo, en la temporada 2013-14 Miranda formó junto a Godín la pareja titular de centrales del Atlético de Madrid y volvieron a ser la defensa menos goleada de la competición ayudando a Courtois a conquistar su segundo Zamora consecutivo. La buena defensa del equipo junto con el resto de las actuaciones de las demás líneas del equipo propiciaron que se proclamaran campeones de Liga en la última jornada gracias al empate obtenido frente al Barcelona en el Camp Nou.
En la Liga de Campeones el Atlético se clasificó para jugar la final cuarenta años después frente al Real Madrid. Miranda disputó la final al completo pero no pudo conseguir el título ya que tras ir ganando la mayor parte del partido, un gol de Sergio GRamos en el descuento forzó la prórroga y en los 30 minutos siguientes el Madrid fue muy superior y venció por mhdp
Último año
Al comienzo de la temporada se proclamó campeón de la Supercopa de España gracias al empate a uno obtenido en el campo del Real Madrid y a la victoria por uno a cero en el Vicente Calderón. Miranda fue titular en el eje de la zaga en ambos partidos.
Durante el resto de la temporada, las lesiones y sanciones le hicieron disputar un menor número de partidos que las temporadas anteriores alternando la titularidad con su compañero José María Giménez. En la séptima jornada de Liga disputó su partido número 150 como rojiblanco[3] ante el Valencia aunque no fue uno de los mejores que disputó ya que el equipo perdió por tres a uno y Miranda anotó el que abría la cuenta para el club valenciano en propia puerta. El equipo finalizó la temporada en tercera posición y fue el segundo equipo menos goleado.
Inter de Milán
El 30 de junio de 2015, el club de la Serie A, el Inter de Milán, anunció que había fichado a Miranda en un préstamo a dos años, por 4 millones de euros, con la obligación de fichar directamente por 11 millones de euros adicionales el 1 de julio de 2017, con condiciones que empujarían la fecha incluso antes.[4][5][6][7] La obligación se activó después del debut de Miranda en la temporada 2016-17 con el Inter el 20 de julio.[7][8]
Miranda hizo su debut en el Inter el 23 de agosto cuando comenzaron la temporada con una victoria en casa por 1-0 sobre el Atalanta. Jugó 32 partidos durante la campaña, anotando una vez en la victoria por 3-1 contra la Sampdoria en San Siro el 20 de febrero de 2016.[9] También fue expulsado dos veces en su primer año con los nerazzurri, la primera el 27 de septiembre de 2015 por una falta sobre Nikola Kalinić en la derrota en casa por 4-1 ante la Fiorentina que acabó con el inicio invicto del Inter.[10]
Jiangsu Suning
El 26 de julio de 2019 se anunció que el contrato de Miranda con el Inter se rescindió de mutuo acuerdo.[11] El Inter también anunció que estaba listo para unirse al club chino Jiangsu Suning. Sin embargo, el 28 de febrero de 2021, Jiangsu anunció que el club se disolvería y, debido a eso, todos los jugadores contratados por el club serían liberados, incluido Miranda.[12]
Regreso a São Paulo
El 6 de marzo de 2021, antes del derbi ante el Santos en el Campeonato Paulista, el presidente del São Paulo, Julio Casares, confirmó el regreso de Miranda en libre traspaso tras días de negociaciones. Firmó un contrato de 1 año y 8 meses.[13]
Selección nacional
El 20 de agosto de 2007 fue convocado por primera vez con Brasil pero no fue hasta más de un año después, el 1 de abril de 2009, cuando debutó contra Perú en un partido de la fase de clasificación para el Mundial 2010.
Ese mismo año fue convocado para disputar la Copa Confederaciones 2009 en la que la Selección brasileña se alzó con el título. No fue considerado para disputar la Copa Mundial de Fútbol de 2010. Sin embargo si fue considerado para disputar el mundial siguiente, pero no fue convocado finalmente.
En 2015 fue convocado para disputar la Copa América 2015. Miranda fue titular en todos los partidos llegando a llevar el brazalete de capitán en alguno de ellos. Brasil quedó primera de su grupo pero fue eliminada en cuartos de final ante Paraguay. El partido terminó empate a uno y se decidió en la tanda de penaltis. Miranda anotó el penalti que le tocó lanzar pero el mayor acierto de sus rivales le dejaron fuera del torneo.
En mayo de 2019, Miranda fue incluido en el equipo de 23 hombres de Brasil para la Copa América 2019 en casa. Hizo su única aparición en la competición en la victoria de Brasil por 2-0 sobre sus rivales Argentina en las semifinales de la competición el 2 de julio, sustituyendo a Marquinhos en la segunda mitad.[14] Posteriormente, Brasil ganó el título luego de una victoria por 3-1 sobre Perú en la final el 7 de julio, en el Estadio Maracaná.[15]