SELECT — Referencia de SQL en Marketing Cloud
La cláusula de entrada de cada SQL Query Activity en Marketing Cloud — qué es, qué soporta oficialmente Salesforce, y los patrones de producción que sobreviven a un hand-off.
SELECT es donde arranca cada SQL Query Activity en Marketing Cloud. Le dice al motor qué columnas de un Data Extension o System Data View tienen que llegar al DE de destino. Lo que NO te dice — los tipos de columna, las longitudes, el orden en que las filas terminan — es el origen de la mayoría de los bugs en producción.
Sintaxis oficial
La sintaxis de SELECT en MC SQL es un subset estricto de T-SQL. Soporta proyección con aliases de columna, expresiones y funciones a nivel columna. No hay SELECT INTO (usá INSERT INTO ... SELECT para escribir al destino), no hay SELECT TOP n PERCENT, y ORDER BY no es confiable cuando va envuelto en un INSERT INTO ... SELECT (ver gotchas — #10).
-- Proyección plana
SELECT
SubscriberKey,
EmailAddress,
LoyaltyTier
FROM master_subscribers;
-- Con aliases + expresiones
SELECT
s.SubscriberKey,
LOWER(s.EmailAddress) AS EmailAddressNormalized,
CASE
WHEN s.LoyaltyTier IN ('gold','silver') THEN 'high'
ELSE 'standard'
END AS Segment
FROM master_subscribers s;
-- Con agregado
SELECT
EmailDomain,
COUNT(*) AS SubscriberCount
FROM master_subscribers
GROUP BY EmailDomain;Referencia:
Lo que sobrevive en producción
Evitá SELECT *
-- EN RIESGO — el orden y la presencia de columnas dependen del DE de origen,
-- que puede cambiar entre deploys sin que te enteres
SELECT * FROM master_subscribers;
-- DURABLE — proyección explícita, rompe en voz alta si una columna desaparece
-- en lugar de re-formar el DE de destino en silencio
SELECT
SubscriberKey,
EmailAddress,
LoyaltyTier,
LastPurchase
FROM master_subscribers;El wildcard es más rápido de tipear, más lento de debuggear a las 11 de la noche. El dueño del DE agrega una columna, tu DE de destino se desfasa de schema, el próximo Send levanta la forma equivocada — y nada de eso emerge hasta que un journey enruta mal a alguien.
Comentá la intención en los aliases
SELECT
SubscriberKey,
EmailAddress,
-- Alias del resultado de LOWER() para que el nombre de columna del DE
-- de destino documente que el valor crudo se normalizó al momento del query.
LOWER(EmailAddress) AS EmailAddressLower
FROM master_subscribers;El alias es el único lugar donde el próximo dev ve qué decidiste. Una columna EmailAddressLower lleva la decisión; una columna Email1 no lleva nada.
No traigas lo que el destino no necesita
Cada columna del DE de destino es costo de almacenamiento y tiempo de query en la próxima lectura. Si el Send Definition de aguas abajo solo necesita SubscriberKey + EmailAddress, proyectá esas dos — no las ocho que te hicieron falta para computar el filtro.
System Data Views: el set de columnas está documentado, pero ojo con la rotación
Cuando hacés SELECT desde _Subscribers, _Sent, _Open y compañía, el set de columnas está documentado en Salesforce Help. El riesgo no son las columnas que existen — es si el set de filas todavía mapea a los SubscriberKeys que esperás después de una rotación de Send Definition. Ver gotchas — #6.
Decisión rápida
Usá SELECT directo cuando:
- Estás proyectando desde un solo Data Extension o una sola System Data View hacia un DE de destino.
- Las columnas que necesitás ya tienen tipo y largo correcto en el origen.
- El query se mantiene bajo ~3 minutos contra un volumen representativo de producción.
Envolvé SELECT en un paso de staging cuando:
- Estás transformando con
CASE, ops de string, o aritmética de fechas — primero stagéa, dedupeá o validá, después promové. - Estás joineando entre más de dos Data Extensions — aplaná por etapas.
- El origen es una System Data View — primero snapshot a un
de_log_*que vos controlás.
No uses SELECT cuando lo que querías era un update:
- Las SQL Activities de MC no pueden hacer
UPDATE. Re-emití la fila víaINSERT INTO ... SELECTcon el modo "Update" del DE de destino y la primary key correcta. Ver gotchas — #2.
Relacionado
- MC SQL gotchas — los 10 que rompen a escala, transversales a todas las cláusulas
Próximas páginas de referencia: Basics · FROM · JOIN · WHERE · LIKE · CASE · INSERT INTO · String / Date / Numeric / Conversion / Aggregate / Null Functions · Style Guide.
Más snippets how-to para debugging común en producción — sends de email, largo de valores, alcance de contactos, etc.