Por un lado, porque estás agrupando por codigo de trabajo, y no por cliente.
Por otro lado, el OR es una disyunción, cortando las condiciones del WHERE en dos y tomando ambas partes como evaluaciones por separado. Eso empeora la cosa.
Si quieres que ambos operen como una única condición, sería:
Código MySQL:
Ver originalSELECT cl.codcliente
, tr.codtrabajo
, cl.nombre
, cl.apellido
, cl.dni
, cl.telefono
, cl.email
, cl.nom_fiscal, tr.estado, tr.tipo_trabajo, tr.observacion, tr.descripcion, tr.precio, tr.pagado
FROM $tabla_db1 cl
INNER JOIN $tabla_db2 tr
ON cl.codcliente
= tr.codcliente
WHERE cl.tipo_cliente
= 'particular' tr.observacion
LIKE '%$keyword%' OR tr.descripcion
LIKE '%$keyword%' )