Можете да използвате променлива, за да проверите дали последният идентификатор е равен на текущия и в този случай вместо това изведете null или ''.
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
Пример:http://sqlfiddle.com/#!2/658e4c/6
Забележете, това е малко хакерско. Умишлено направих ClientId второто поле, за да мога да променя и върна променливата clientId в същото поле. В други, по-сложни случаи, може да се наложи да направите това в отделно поле. Но за да премахнете това поле за място от резултата, ще трябва да вградите цялата заявка в подселекция и да дефинирате желаните полета в правилния ред в заявката от най-високо ниво.