Pro kontrolu, zda se poslední id rovná aktuálnímu id, můžete použít proměnnou, a v takovém případě vypsat místo toho hodnotu null nebo ''.
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
Příklad:http://sqlfiddle.com/#!2/658e4c/6
Všimněte si, že je to trochu hackerské. Záměrně jsem udělal ClientId jako druhé pole, abych mohl změnit a vrátit proměnnou clientId ve stejném poli. V jiných, propracovanějších případech to možná budete muset udělat v samostatném poli. Chcete-li však toto zástupné pole z výsledku odstranit, budete muset vložit celý dotaz do dílčího výběru a definovat požadovaná pole ve správném pořadí v dotazu nejvyšší úrovně.