Il girone di ritorno inizia con un po' di cadute al vertice della classifica. Il primo a compiere un doppio passo falso è il Milan, che cade al Picchi con il Livorno e a San Siro con il Bologna, ma anche la Juve lo segue e nei turni successivi è sconfitta a sua volta al Delle Alpi dalla Sampdoria e al Barbera dal Palermo.
Alla 25ª potrebbe esserci lo snodo della stagione: la Juventus impatta infatti 0-0 a Messina, mentre il Milan supera in extremis a San Siro il Cagliari per 1-0 (goal di Serginho) e aggancia i rivali in vetta a quota 54.
Si annuncia un testa a testa per il titolo. Nelle successive 5 sfide, infatti, le due squadre viaggiano allo stesso ritmo: quattro vittorie e un pareggio per entrambe. I rossoneri cadono infatti al Franchi con il Siena, mentre i bianconeri la settimana seguente perdono il Derby d'Italia con l'Inter.
Intanto nelle posizioni di centro e bassa classifica si profila quella che sarà poi una grossa bagarre finale. Dal Messina, 7° con 44 punti, al Brescia, terzultimo con 35, sono appena 9 i punti di distacco. In mezzo alla lotta per la permanenza nel massimo campionato continuano ad esserci naturalmente anche Roma e Lazio.
I giallorossi il 13 marzo, dopo il k.o. con il Cagliari, il terzo di fila, hanno sostituito Delneri con la leggenda Bruno Conti, responsabile del settore giovanile. Il quarto allenatore stagionale (conteggiando anche l'addio di Prandelli ad inizio anno per motivi personali) è indicativo delle difficoltà incontrate dalla Lupa, precipitata al 12° posto con Bologna e Reggina. Ma anche i biancocelesti, che hanno un punto in più (41 contro 40) non possono dormire sogni tranquilli.
Juventus e Milan giungono allo scontro diretto dell'8 maggio appaiate con 76 punti. Trezeguet risolve la sfida del Meazza, dando il là all'allungo finale della Vecchia Signora. Il Milan, perso il confronto diretto, crolla e venerdì 20 maggio, pareggiando 3-3 in casa con il Palermo, concede in anticipo alla Juventus, che pareggia a sua volta 2-2 al Picchi con il Livorno, il titolo di campione d'Italia. Sarebbe il 28° Scudetto della storia juventina, ma un anno dopo sarà cancellato dall'inchiesta della Giustizia sportiva, denominata Calciopoli.
La situazione diventa invece drammatica per le romane, che alla quartultima escono sconfitte dai rispettivi impegni: la Roma perde 2-1 al Tardini col Parma, la Lazio 0-1 in casa con l'Udinese. Il risultato è un'incredibile incertezza su chi saranno le tre squadre che retrocederanno in B, quando mancano appena tre turni alla conclusione della Serie A. Beffardamente il calendario propone, fra le altre sfide, il derby capitolino. Roma-Lazio, sfida contrassegnata dalla grande paura di perdere, termina 0-0 con un passetto in avanti per tutte e due le squadre, che ancora non sanno se riusciranno a mantenere la categoria quando mancano soltanto 180 minuti alla fine del torneo.
Calendario e calcolatrice alla mano, la coda del campionato è un vero e proprio thriller: 3 su 13 squadre, racchiuse in soli 8 punti, scenderanno di categoria. Ultima è l'Atalanta, con 35 punti, situazione da brividi per Brescia e Fiorentina, appaiate a 38, poi Chievo e Siena a 39, Parma a 40, Roma e Bologna a 41, Reggina, Lecce e Lazio a 42, Livorno e Cagliari a 43. Un autentico rebus che rende imprevedibili gli sviluppi delle ultime due giornate.
Complessivamente sono ben 8 gli scontri diretti ancora da giocare, e alcuni di questi susciteranno più di una perplessità per le sviste arbitrali clamorose o sospetti di combine, finendo poi a loro volta nel faldone di inchiesta di Calciopoli. La Lazio pareggia 1-1 con la Fiorentina ma al match è legato un clamoroso abbaglio dell'arbitro Rosetti e del guardalinee Pisacreta, che non si accorgono di un fallo di mano evidente di Zauri, quando a porta vuota evita una rete praticamente già fatta dei viola. I biancocelesti devono sudarsela fino alla fine.
La Roma batte fuoricasa l'Atalanta con un goal di Antonio Cassano e vede il traguardo salvezza, condannando alla B i bergamaschi, primi retrocessi. Si tirano fuori dalla contesa anche il Livorno, che sale a 44 punti grazie al pari con la Juventus, e il Cagliari, che pareggia a sua volta in casa con l'Udinese ed è appaiato agli amaranto e alla stessa Roma.
Le altre 2 posizioni si decideranno all'ultimo turno: la battaglia salvezza coinvolge ancora 9 squadre: Lazio, Lecce e Reggina, tutte a 43 punti, Chievo 42, Bologna, Brescia e Parma a 41, il Siena a 40 e la Fiorentina a 39. Le partite decisive sono ben 7, per un totale di 2187 diverse combinazioni possibili.
Si giocano infatti Bologna-Sampdoria, Fiorentina-Brescia, Inter-Reggina, Lecce-Parma, Palermo-Lazio, Roma-Chievo e Siena-Atalanta. Il match più drammatico è quello del Franchi di Firenze: la Fiorentina travolge 3-0 il Brescia, si salva grazie alla classifica avulsa favorevole su Bologna e Parma e condanna le Rondinelle alla B nella prima stagione senza Roberto Baggio nonostante i 41 punti conquistati.
La gara in assoluto più discussa del lotto è il rocambolesco 3-3 fra salentini e ducali, che consente ai primi di salvarsi e ai gialloblù di approdare allo spareggio salvezza. Il Siena è salvo battendo 2-1 l'Atalanta già spacciata, mentre a Reggina e Lazio bastano due pareggi (0-0 a Milano e 3-3 a Palermo) per tagliare il sospirato traguardo della permanenza matematica. I biancocelesti, sotto 3-1 al Barbera, rimontano nel finale di gara trovando prima il 3-2 con Bazzani e infine il pareggio finale con Muzzi in Zona Cesarini.
La ruota della fortuna gira male, invece, al Bologna, che è bloccato 0-0 in casa dalla Sampdoria: in virtù della classifica avulsa, i felsinei, che hanno in tutto 42 punti, devono affrontare il Parma nello spareggio andata-ritorno per decidere la terzultima retrocessa. I rossoblù vincono 0-1 al Tardini (rete di Tare) ma poi cadono 0-2 in casa salutando con amarezza il massimo campionato.
Nelle zone alte della classifica, dietro l'Inter, terza, l'Udinese è la rivelazione con un 4° posto che varrà la qualificazione alla Champions League, mentre, abbastanza clamorosamente, Roma e Lazio, nonostante una stagione horror, riescono a staccare il pass per l'Europa: la Lupa va in Coppa UEFA grazie al raggiungimento della finale di Coppa Italia contro l'Inter, i biancocelesti si iscrivono all'Intertoto grazie alla rinuncia espressa del Messina e alla domanda di iscrizione presentata in ritardo dal Livorno.
Fra i calciatori festeggia invece il centravanti del Livorno Cristiano Lucarelli, che corona una carriera da bomber con 24 reti che gli valgono il titolo di capocannoniere. Si concludeva così, in maniera del tutto imprevedibile, la stagione di Serie A più assurda e folle degli anni Duemila.