Ambedue sono corretti e non danno problemi solo che il secondo è migliore perché liberi la memoria utilizzata dal Result Set.

Una domanda: ma il primo ed il secondo $sql="......." sono uguali?

Osservazione:

dal manuale di php:
Solo per le istruzioni SELECT, SHOW, EXPLAIN o DESCRIBE mysql_query() restituisce un identificativo di risorsa o FALSE se la query non è stata eseguita correttamente. Per altri tipi di istruzioni SQL, mysql_query() restituisce TRUE in caso di successo e FALSE in caso di errore. Un valore restituito diverso da FALSE indica che la query era lecita ed è stata eseguita dal server. Questo non indica niente riguardo il numero di righe coinvolte o restituite. è assolutamente possibile che una query abbia successo ma che non coinvolga o restituisca nessuna riga.

Quindi sarebbe più opportuno che tu gestisca il risultato di mysql_query per vedere se si sono verificati errori o meno.
Inoltre, per come tu hai scritto

$qry=mysql_query($sql);

Se qui c'è un errore viene visualizzato a video. Per questioni di eleganza, sarebbe meglio ke tu catturassi l'errore o ad esempio

$qry=@mysql_query($sql) or die("TUO MESSAGGIO");

o, meglio ancora:

$qry=@mysql_query($sql);

if ($qry === FALSE)
{
FAI UN QUALCOSA....
}


Stesso discorso per mysql_fetch_row();


Ciao