Good points Jamiet but (there's always one isn't it ;) )
Why do you LEFT JOIN using the C.Name instead of CNId?
Joining by C.Name would only work if you replicate the changes to all records when it changes and IF it was a unique value ...
I take it was just to make the point !
Regards,
Cris.