Vous pouvez utiliser une variable pour vérifier si le dernier identifiant est égal à l'identifiant actuel, et dans ce cas afficher null ou '' à la place.
select
case when c.ClientId <> @clientid then c.Name else '' end as ClientName,
case when c.ClientId <> @clientid then @ClientId := c.ClientId else '' end as ClientId,
p.ContactId,
p.Name as ContactName
from
Clients c
inner join Contacts p on p.ClientId = c.Clientid
, (select @clientid := -1) x
order by
c.ClientId, p.ContactId
Exemple :http://sqlfiddle.com/#!2/658e4c/6
Remarque, c'est un peu hacky. J'ai délibérément fait de ClientId le deuxième champ, afin de pouvoir modifier et renvoyer la variable clientId dans le même champ. Dans d'autres cas plus élaborés, vous devrez peut-être le faire dans un champ séparé. Mais pour éliminer ce champ d'espace réservé du résultat, vous devrez intégrer toute la requête dans une sous-sélection et définir les champs souhaités dans le bon ordre sur la requête de niveau supérieur.