Hola:
Yo creo que lo te ocurre es muy lógico, si tomas en cuenta que el primer lazo
deja recorre todo el array $sql hasta el final, en donde se queda su puntero interno. No tengo el manual a la mano, pero para resolver esto, supongo que debe existir alguna función que te permita "retroceder" o regresar el puntero del array hacia el inicio. Creo que es eso.
Buena Suerte !!!