IsNull y Coalesce

10/03/2005 - 11:57 por José Antonio | Informe spam
Que es más correcto utilizar cara la compatibilidad en el futuro y a la
compatibilidad sql la funcion ISNULL o COALESCE?

Saludos.

Preguntas similare

Leer las respuestas

#1 Tinoco
10/03/2005 - 13:59 | Informe spam
Hola Jose,

Realmente son dos cosas diferentes, el ISNULL es una funcion directa sobre
la columna, el COALESCE es muy similar a una instruccion CASE. Normalmente
utilizo el ISNULL.

Hermilson Tinoco

"José Antonio" wrote:

Que es más correcto utilizar cara la compatibilidad en el futuro y a la
compatibilidad sql la funcion ISNULL o COALESCE?

Saludos.



Respuesta Responder a este mensaje
#2 Alejandro Mesa
10/03/2005 - 14:37 | Informe spam
José Antonio,

Que es más correcto utilizar cara la compatibilidad en el futuro y a la
compatibilidad sql la funcion ISNULL o COALESCE?



No se a que te refieres con "compatibilidad en el futuro", sera que te
refieres a su comformidad con SQL-92 standard. COALESCE es ANSI standard.

Una cosa quiero hacer notar y es que ISNULL y COALESCE devuelven diferentes
tipo basado en los parametros.

ISNULL - devuelve el tipo del primer parametro
COALESCE - Al igual que CASE, devuelve el tipo de mas alta precedencia

mucho cuidado con eso.

Ejemplo:

select 13 / coalesce(cast(null as int), cast(2.00 as numeric(3, 2)))
select 13 / isnull(cast(null as int), cast(2.00 as numeric(3, 2)))
go

En el primero, COALESCE devolvera NUMERIC porque es el de mas alta
precedencia, por lo que 13 / 2.00 dara un valor NUMERIC.

En el segundo ISNULL devolvera INT porque es el primer parametro, por lo que
13 / 2 dara un resultado INT.



AMB



"José Antonio" wrote:

Que es más correcto utilizar cara la compatibilidad en el futuro y a la
compatibilidad sql la funcion ISNULL o COALESCE?

Saludos.



Respuesta Responder a este mensaje
#3 José Antonio
10/03/2005 - 18:19 | Informe spam
Gracias por la aclaración, entonces no se aconseja en especial usar una de
ellas?


"Alejandro Mesa" escribió en el
mensaje news:
José Antonio,

Que es más correcto utilizar cara la compatibilidad en el futuro y a la
compatibilidad sql la funcion ISNULL o COALESCE?



No se a que te refieres con "compatibilidad en el futuro", sera que te
refieres a su comformidad con SQL-92 standard. COALESCE es ANSI standard.

Una cosa quiero hacer notar y es que ISNULL y COALESCE devuelven
diferentes
tipo basado en los parametros.

ISNULL - devuelve el tipo del primer parametro
COALESCE - Al igual que CASE, devuelve el tipo de mas alta precedencia

mucho cuidado con eso.

Ejemplo:

select 13 / coalesce(cast(null as int), cast(2.00 as numeric(3, 2)))
select 13 / isnull(cast(null as int), cast(2.00 as numeric(3, 2)))
go

En el primero, COALESCE devolvera NUMERIC porque es el de mas alta
precedencia, por lo que 13 / 2.00 dara un valor NUMERIC.

En el segundo ISNULL devolvera INT porque es el primer parametro, por lo
que
13 / 2 dara un resultado INT.



AMB



"José Antonio" wrote:

Que es más correcto utilizar cara la compatibilidad en el futuro y a la
compatibilidad sql la funcion ISNULL o COALESCE?

Saludos.



Respuesta Responder a este mensaje
#4 Alejandro Mesa
10/03/2005 - 18:37 | Informe spam
José Antonio,

Como te dije, COALESCE es ANSI standard. Asi que si debes escojer, pues yo
me iria por esta. SQL Server a veces escoje un mejor plan de ejecucion en
dependencia de si usas la una o la otra. Yo te recomendaria hacer pruebas
para ver cual da mejor resultado, y si ambas dan el mismo, pues usar COALESCE.

Otra diferencia es que Sql Server considera una columna calculada como
nullable (que acepta valor null) si se usa COALESCE en la formula, y no asi,
si se usa ISNULL.

Ejemplo:

create table t1 (
colA int,
colB as isnull(colA, 0) primary key
)
go

create table t2 (
colA int,
colB as coalesce(colA, 0) primary key
)
go

drop table t1
go


AMB

"José Antonio" wrote:

Gracias por la aclaración, entonces no se aconseja en especial usar una de
ellas?


"Alejandro Mesa" escribió en el
mensaje news:
> José Antonio,
>
>> Que es más correcto utilizar cara la compatibilidad en el futuro y a la
>> compatibilidad sql la funcion ISNULL o COALESCE?
>
> No se a que te refieres con "compatibilidad en el futuro", sera que te
> refieres a su comformidad con SQL-92 standard. COALESCE es ANSI standard.
>
> Una cosa quiero hacer notar y es que ISNULL y COALESCE devuelven
> diferentes
> tipo basado en los parametros.
>
> ISNULL - devuelve el tipo del primer parametro
> COALESCE - Al igual que CASE, devuelve el tipo de mas alta precedencia
>
> mucho cuidado con eso.
>
> Ejemplo:
>
> select 13 / coalesce(cast(null as int), cast(2.00 as numeric(3, 2)))
> select 13 / isnull(cast(null as int), cast(2.00 as numeric(3, 2)))
> go
>
> En el primero, COALESCE devolvera NUMERIC porque es el de mas alta
> precedencia, por lo que 13 / 2.00 dara un valor NUMERIC.
>
> En el segundo ISNULL devolvera INT porque es el primer parametro, por lo
> que
> 13 / 2 dara un resultado INT.
>
>
>
> AMB
>
>
>
> "José Antonio" wrote:
>
>> Que es más correcto utilizar cara la compatibilidad en el futuro y a la
>> compatibilidad sql la funcion ISNULL o COALESCE?
>>
>> Saludos.
>>
>>
>>



Respuesta Responder a este mensaje
#5 José Antonio
11/03/2005 - 08:59 | Informe spam
Gracias por la informacion.

"Alejandro Mesa" escribió en el
mensaje news:
José Antonio,

Como te dije, COALESCE es ANSI standard. Asi que si debes escojer, pues yo
me iria por esta. SQL Server a veces escoje un mejor plan de ejecucion en
dependencia de si usas la una o la otra. Yo te recomendaria hacer pruebas
para ver cual da mejor resultado, y si ambas dan el mismo, pues usar
COALESCE.

Otra diferencia es que Sql Server considera una columna calculada como
nullable (que acepta valor null) si se usa COALESCE en la formula, y no
asi,
si se usa ISNULL.

Ejemplo:

create table t1 (
colA int,
colB as isnull(colA, 0) primary key
)
go

create table t2 (
colA int,
colB as coalesce(colA, 0) primary key
)
go

drop table t1
go


AMB

"José Antonio" wrote:

Gracias por la aclaración, entonces no se aconseja en especial usar una
de
ellas?


"Alejandro Mesa" escribió en el
mensaje news:
> José Antonio,
>
>> Que es más correcto utilizar cara la compatibilidad en el futuro y a
>> la
>> compatibilidad sql la funcion ISNULL o COALESCE?
>
> No se a que te refieres con "compatibilidad en el futuro", sera que te
> refieres a su comformidad con SQL-92 standard. COALESCE es ANSI
> standard.
>
> Una cosa quiero hacer notar y es que ISNULL y COALESCE devuelven
> diferentes
> tipo basado en los parametros.
>
> ISNULL - devuelve el tipo del primer parametro
> COALESCE - Al igual que CASE, devuelve el tipo de mas alta precedencia
>
> mucho cuidado con eso.
>
> Ejemplo:
>
> select 13 / coalesce(cast(null as int), cast(2.00 as numeric(3, 2)))
> select 13 / isnull(cast(null as int), cast(2.00 as numeric(3, 2)))
> go
>
> En el primero, COALESCE devolvera NUMERIC porque es el de mas alta
> precedencia, por lo que 13 / 2.00 dara un valor NUMERIC.
>
> En el segundo ISNULL devolvera INT porque es el primer parametro, por
> lo
> que
> 13 / 2 dara un resultado INT.
>
>
>
> AMB
>
>
>
> "José Antonio" wrote:
>
>> Que es más correcto utilizar cara la compatibilidad en el futuro y a
>> la
>> compatibilidad sql la funcion ISNULL o COALESCE?
>>
>> Saludos.
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida