Saltar al contenido principal

Pregunta

¿Cómo puedo verificar que dos consultas devuelvan los mismos conjuntos de resultados?

Respuesta

Puede utilizar el siguiente enfoque:
WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- tu consulta 1 aquí
            -- SELECT ...
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- tu consulta 2 aquí
            -- SELECT ...
        )
    ) AS q2_resultset_hash
SELECT equals(q1_resultset_hash,q2_resultset_hash) as Q1_equals_Q2
El ejemplo usa una CTE para calcular la suma del valor cityHash de cada fila en estas dos consultas, y devolverá 1 si los dos conjuntos de resultados son idénticos. Usando algunos datos de una secuencia de enteros y formato Pretty:
WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            SELECT *
            FROM numbers(10)
            ORDER BY number DESC
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            SELECT *
            FROM numbers(10)
            ORDER BY number ASC
        )
    ) AS q2_resultset_hash
SELECT q1_resultset_hash = q2_resultset_hash AS Q1_equals_Q2
FORMAT Pretty
devolverá:
┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│            1 │
└──────────────┘
Aunque esto puede ser útil en muchos casos, no puede considerarse una solución infalible para validar la igualdad de los conjuntos de resultados para todo tipo de datos, y su uso tiene algunas limitaciones; por ejemplo, si alguna fila contiene valores NULL, el enfoque anterior fallará.
Última modificación el 10 de junio de 2026