OK, Ahora se entiende mejor...
Lo que quieres es la lista completa de personas,
se tengan o no detalles.
Eso sería un LEFT JOIN, pero el problema que le veo es que no tienes una tabla normalizada. La tabla de datos_usuario, en principio, es una tabla de tipo taxonómica, aparentemente diseñada con el mismo aspecto de las de Wordpress. Ese tipo de tablas no sirve para ser usadas en consultas como las que planteas, porque no se ajustan al modelo relacional.
Para que se entienda un poco mejor: Esas tablas son "bolsas de datos", donde se agrupan todas las cosas sin respetar dominios, y como no se tiene una limitación de las tipologías de datos (campo nombre_dato), no se puede establecer cuántos INNER JOIN se deben indicar, ni cual será el parámetro de cada uno.
La recuperación de datos de esa clase se hace por una combinación entre SQL y programación. Pero no medio de SQL puro.
Se puede intentar una query que devuelva esas tres columnas de datos, pero no será sencillo:
Código MySQL:
Ver originalSELECT u.id
, u.nombre
, d.Provincia
, d.ciudad
, d.telefono
(SELECT d1.usuarioid
, d1.valor_dato Provincia
, d2.valor_dato ciudad
, d3.valor_dato telefono
INNER JOIN datos_usuario d2
ON d1.usuarioId
= d2.usuarioId
INNER JOIN datos_usuario d2
ON d1.usuarioId
= d3.usuarioId
WHERE d1.nombre_dato
= 'provincia' AND d2.nombre_dato
= 'ciudad' AND d3.nombre_dato
= 'telefono') d
ON u.id
= d.usuarioid
;
Por cada columna extra, la tabla derivada deberá incluir otro nivel de INNER JOIN, con su respectivo parámetro de nombre_dato.
Como verás, se complica bastante.
En realidad el problema es que la tabla datos_usuario debería tener una columna por cada atributo de detalle que exista. Eso es lo que
debería existir, y no esa "bolsa de datos".