La soluzione non corrisponde a quella che era la tua richiesta iniziale. Tu chiedevi di ottenere prima i cognomi diversi da '' e ordinarli per nome seguiti dai record con cognomi uguali a '' sempre ordinati per nome.

Nella tua soluzione ordini i per cognome e, a parità di cognome, per nome.

Questa cosa la potevi fare molto più semplicemnte con un:

SELECT * FROM tabella
ORDER BY cognome, nome asc/desc

Usi asc o desc a seconda che tu voglia prima quelli con cognome diverso da '' o gli altri.